问题描述
我正在ASP.net MVC 2.0应用程序中尝试这样做.我有一个包含两个字段number1和number2的表单.
I am trying to do like this in ASP.net MVC 2.0 Application. I have a form with two fields number1 and number2.
我想使用ajax请求将这两个数字相加两个.在控制器中,我收到两个数字,将它们相加并将结果存储在另一个字符串中.然后,我正在这样做:
I want add two these two numbers using an ajax request. In the controller, I am recieving two numbers ,adding them and storing result in another string. Then, I am doing like this:
[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;
}
是否可以从控制器操作中以字符串形式返回Java脚本?
Is it possible to return java script in the form of string from controller actions?
推荐答案
您可以返回 JavaScriptResult
:
You could return a 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>");
}
为此,您必须配置AJAX请求以执行javascript.例如,如果您使用的jQuery如下所示:
For this to work you have to configure your AJAX request to execute javascript. For example if you are using jQuery that would look like this:
$.ajax({
url: '/someaction',
type: 'POST',
data: { txtbox1: '12', txtbox2: '13' },
dataType: 'script'
});
作为替代方案,您可以返回 JsonResult 会将模型序列化为JSON字符串:
As an alternative you could return a JsonResult which will serialize the model to a JSON string:
[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',
type: 'POST',
data: { txtbox1: '12', txtbox2: '13' },
success: function(result) {
alert(result.sum);
}
});
正如您在这里看到的那样,您不再在控制器中将javascript与C#代码混合使用.遵守DRY原则.javascript属于javascript文件.
As you can see here you are no longer mixing javascript with C# code in your controller. Respect the DRY principle. javascript belongs in javascript files.
作为对该控制器操作的进一步改进,我建议您引入一个视图模型,并摆脱从FormCollection解析内容的可怕管道代码.这是默认模型联编程序的职责.
As further improvement to this controller action I would recommend you introducing a view model and get rid of the terrible plumbing code of parsing stuff from the FormCollection. That's the responsibility of the default model binder.
所以:
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移到了它所在的位置.
Conclusion: we have put this controller action on a diet, and moved the javascript where it belongs.
这篇关于我可以通过Ajax请求将MVC控制器中的javascript返回到View吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!