Is it possible to return java script in the form of string from controller actions
[HttpPost]
public ActionResult TestAjax(FormCollection form)
{
int strnum1 = Convert.ToInt32(form["txtBox1"].ToString());
int strnum2 = Convert.ToInt32(form["txtBox2"].ToString());
return JavaScript("alert(\"some message\")");
}
为此,您必须配置AJAX请求以执行javascript.例如,如果您使用的jQuery如下所示:
$.ajax({
url: '/someaction',type: 'POST',data: { txtBox1: '12',txtBox2: '13' },dataType: 'script'
});
作为替代方案,您可以返回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 });
}
接着:
$.ajax({
url: '/someaction',success: function(result) {
alert(result.sum);
}
});
正如您在此处所看到的,您不再将javascript与控制器中的C#代码混合使用.尊重DRY原则. javascript属于javascript文件.
作为对此控制器操作的进一步改进,我建议您引入视图模型并摆脱从FormCollection解析内容的可怕管道代码.这是默认模型绑定器的责任.
所以:
public class Sumviewmodel
{
public int TxtBox1 { get; set; }
public int TxtBox2 { get; set; }
}
接着:
[HttpPost]
public ActionResult TestAjax(Sumviewmodel model)
{
int sum = model.TxtBox1 + model.TxtBox2;
return Json(new { sum = sum });
}
结论:我们已经将这个控制器动作放在节食上,并将javascript移动到它所属的位置.