是否有可能從控制器字符串的形式返回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>");
}
爲了這個工作你必須配置你的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',
type: 'POST',
data: { txtbox1: '12', txtbox2: '13' },
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。
JSON應該從JsonResult動作返回。 –
@達林..我不使用jQuery的Ajax而是使用MVC的Ajax.how在這種情況下做? –
@ Darin ..感謝您的寶貴意見。我們將視圖模型放在項目目錄結構 –