2010-10-23 71 views
1

我試圖通過jQuery Ajax將表單提交給我的控制器。下面的代碼大部分工作,但是,ThreadId參數不被傳遞。如果我直接調用控制器而不使用jQuery,它會被傳遞,但是當使用jQuery時,我在form.serialize()後面看不到ThreadId。將參數(如ThreadId)傳遞給jQuery form post最簡單的方法是什麼?在ASP.NET MVC中通過jQuery提交表單時傳遞參數

ASPX

<% Html.BeginForm("AddComment", "Home", new { ThreadId = Model.Id }, 
    FormMethod.Post, new { @id = "AddComment" + Model.Id.ToString(), 
    @onsubmit = "javascript:AddComment(this);return false" }); %> 
<%: Html.TextBox("CommentText", "", new { @class = "comment-textbox" })%> 
<input id="Comment" type="submit" name="submitButton" value="Post Comment" /> 
<% Html.EndForm(); %> 

的JavaScript

AddComment = function (sender) { 
    var form = $(sender); 
    var data = form.serialize(); 
    $.ajax({ 
     type: "POST", 
     url: "/Home/AddComment", 
     data: data, 
     dataType: "html", 
     success: function (response) { 
      alert(response); 
     }, 
     error: function (error) { 
      alert(error); 
     } 
    }); 
    return false; 
}; 

CONTROLLER

[HttpPost] 
     public ActionResult AddComment(string submitButton, Comment comment) 
     { 
      comment.CreatedDate = DateTime.Now; 
      comment.PosterId = LoggedInUser.Id; 

      _repository.AddComment(comment); 
      _repository.Save(); 

      if (Request.IsAjaxRequest()) 
      { 
       return View("Comment", comment); 
      } 
      else 
       return RedirectToAction("Index"); 
     } 

回答

4

ThreadId參數包含在表單的action屬性。當您將此表單打印出來時,您將張貼到/Home/AddComment,並且不再提供此參數。你可以做到以下幾點,以ajaxify它:

$('#idofyourform').submit(function() { 
    $.ajax({ 
     // use the method as defined in the <form method="POST" ... 
     type: this.method, 

     // use the action as defined in <form action="/Home/AddComment?ThreadId=123" 
     url: this.action, 

     data: $(this).serialize(), 
     dataType: 'html', 
     success: function (response) { 
      alert(response); 
     }, 
     error: function (error) { 
      alert(error); 
     } 
    }); 
    return false; 
}); 

另一種可能性是,如果把它在action屬性,包括形式爲隱藏領域內ThreadId參數來代替。

+0

謝謝!你的對,該行動確實有正確的網址。但是,出於某種原因,而不是我的AddComment方法被調用,我的索引方法被調用。仍試圖找出原因。 – Prabhu 2010-10-23 21:08:36

+0

沒關係,我在做form.action,當它應該是sender.action。謝謝你的幫助。 – Prabhu 2010-10-23 21:24:45

+0

順便說一句,我有2個按鈕的形式,當我這樣做沒有jQuery我用輸入按鈕名稱屬性找出哪個按鈕發送請求在控制器端。任何想法如何我可以用jQuery做到這一點? – Prabhu 2010-10-23 21:26:13

相關問題