2013-10-23 65 views
3

我想在ASP.net MVC 2.0应用程序中这样做。我有两个字段number1和number2的表单。我可以从MVC控制器返回javascript通过Ajax请求查看

我想用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; 

    } 

是否有可能在字符串的形式从控制器动作返回Java脚本

回答

7

是否有可能从控制器字符串的形式返回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。

+0

JSON应该从JsonResult动作返回。 –

+0

@达林..我不使用jQuery的Ajax而是使用MVC的Ajax.how在这种情况下做? –

+0

@ Darin ..感谢您的宝贵意见。我们将视图模型放在项目目录结构 –

1

为什么不使用你的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 strnum3; 
    } 

    return string.Empty; 

} 

$.ajax({ 
    url: "/Controller/TestAjax/", 
    type: "POST", 
    data: /* form data here */, 
    success: SuccessCallback, 
    error: FailureCallback 
}); 

function SuccessCallback(data) { 
    alert(data); 
} 
1

试试这个,

[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); 
     if (strnum3 != null) 
     { 
      return "<script>alert("some message")</script>"; 
     } 

      return JavaScript("JSFunction(paramtr);");  
    } 

查看: -

function JSFunction(paramtr) 
{ 

} 
相关问题