2013-10-23 104 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) 
{ 

} 
相關問題