2016-07-16 64 views
2

我有一個AJAX的形式,其中URL ID必須從JavaScriptMVC Ajax.BeginForm的JavaScript參數

@using(Ajax.BeginForm("Add","Comments", new { ArticleID = 3 }, new AjaxOptions { UpdateTargetId="Comments"})) 

凡ActionID(3)應與JavaScrpt函數的結果來代替。喜歡的東西

JS:

function GetArticleID() 
{ 
     return 3; 
} 

剃刀:

@using(Ajax.BeginForm("Add","Comments", new { ArticleID = GetArticleID() }, new AjaxOptions { UpdateTargetId="Comments"})) 

控制器:

public ActionResult Add(int ArticleID, Comment model) 
{ 

} 

我如何使用Java腳本函數結果爲BeginForm參數?

+0

你的問題是什麼? – Nirupa

+0

如何使用javacript函數結果作爲BeginForm參數? – Tomasz

+0

將此添加到您的問題中,以便用戶更好地理解它。 – Nirupa

回答

3

該行@using(Ajax.BeginForm("將由服務器上的剃鬚刀執行。那時它並沒有任何有關你的客戶端瀏覽器中javascript方法的知識。所以你不能在那裏混合一個javascript函數。

我更喜歡寫乾淨的自定義代碼來做ajax表單提交(而不是使用Ajax.BeginForm),因爲它允許我以我想要的任何方式自定義。

保持您的表單爲正常形式。

@using(Html.BeginForm("Add","Comments")) 
{ 
    <input type="hidden" name="ArticleId" id="ArticleId" value=""/> 
    <input name="CommentText" type="text" /> 
    <input type="submit" id="saveCmntBtn" /> 
} 

現在收聽提交按鈕的click事件。將ArticleId值分配給輸入字段,獲取表單的序列化版本併發布到服務器。您可以使用jQuery serialize()方法來獲取表單的序列化版本。

$(function(){ 

    $("#saveCmntBtn").click(function(e){ 
    e.preventDefault(); 
    $("#ArticleId").val(GetArticleID()); 
    var f=$(this).closest("form"); 
    $.post(f.attr("action"),f.serialize(),function(res){ 
     $("#Comments").append(res); 
    }); 
    }); 

});