我可以通过Ajax请求将MV从MVC控制器返回到View

Sai*_*ash 4 javascript asp.net-mvc ajaxform

我想在ASP.net MVC 2.0应用程序中这样做.我有一个包含两个字段number1和number2的表单.

我想使用ajax请求添加这两个数字.在控制器中,我收到两个数字,添加它们并将结果存储在另一个字符串中.那么,我这样做:

    [HttpPost]
    public string TestAjax(FormCollection form)
    {
        int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
        int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
        string strnum3 = Convert.ToString(strnum1 + strnum2);
        if (strnum3 != null)
        {
            return "<script>alert("some message")</script>";
        }

        return string.Empty;

    }
Run Code Online (Sandbox Code Playgroud)

是否可以从控制器操作以字符串的形式返回java脚本

Dar*_*rov 9

是否可以从控制器操作以字符串的形式返回java脚本

你可以返回一个JavaScriptResult:

[HttpPost]
public ActionResult TestAjax(FormCollection form)
{
    int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
    int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
    return JavaScript("<script>alert(\"some message\")</script>");
}
Run Code Online (Sandbox Code Playgroud)

为此,您必须配置AJAX请求以执行javascript.例如,如果您使用的jQuery如下所示:

$.ajax({
    url: '/someaction',
    type: 'POST',
    data: { txtbox1: '12', txtbox2: '13' },
    dataType: 'script'
});
Run Code Online (Sandbox Code Playgroud)

作为替代方案,您可以返回一个JsonResult,它将模型序列化为JSON字符串:

[HttpPost]
public ActionResult TestAjax(FormCollection form)
{
    int strnum1 = Convert.ToInt32(form["txtbox1"].ToString());
    int strnum2 = Convert.ToInt32(form["txtbox2"].ToString());
    string strnum3 = Convert.ToString(strnum1 + strnum2);
    return Json(new { sum = strnum3 });
}
Run Code Online (Sandbox Code Playgroud)

然后:

$.ajax({
    url: '/someaction',
    type: 'POST',
    data: { txtbox1: '12', txtbox2: '13' },
    success: function(result) {
        alert(result.sum);
    }
});
Run Code Online (Sandbox Code Playgroud)

正如您在此处看到的,您不再将javascript与控制器中的C#代码混合使用.尊重DRY原则.javascript属于javascript文件.

作为对此控制器操作的进一步改进,我建议您引入视图模型并摆脱从FormCollection解析内容的可怕管道代码.这是默认模型绑定器的责任.

所以:

public class SumViewModel
{
    public int TxtBox1 { get; set; }
    public int TxtBox2 { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

然后:

[HttpPost]
public ActionResult TestAjax(SumViewModel model)
{
    int sum = model.TxtBox1 + model.TxtBox2;
    return Json(new { sum = sum });
}
Run Code Online (Sandbox Code Playgroud)

结论:我们已经将这个控制器动作放在节食上,并将javascript移动到它所属的位置.