2010-10-23 7 views
1

Я пытаюсь выполнить отправку формы моему контроллеру через jQuery Ajax. Следующий код работает по большей части, однако параметр ThreadId не передается. Если я вызываю контроллер напрямую, не используя jQuery, он передается, но при использовании jquery я не вижу ThreadId после form.serialize(). Каким будет самый простой способ передать параметры (например, ThreadId) в сообщение формы jQuery?Передача параметров при отправке формы через jQuery в ASP.NET MVC

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; 
}; 

КОНТРОЛЛЕР

[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; 
}); 

Другая возможность состоит в том, чтобы включить параметр ThreadId внутри формы, как скрытое поле вместо того, чтобы, если положить его в атрибуте действия.

+0

Спасибо! Правильно, у действия есть правильный URL. Однако по какой-то причине вместо моего метода AddComment вызывается метод Index. Все еще пытаюсь понять, почему. – Prabhu

+0

Nevermind, я делал form.action, когда это должно было быть sender.action. Спасибо за вашу помощь. – Prabhu

+0

Btw, у меня есть две кнопки в форме, и когда я делал это без jquery, я использовал атрибут name на кнопке ввода, чтобы выяснить, какая кнопка отправила запрос на конец контроллера. Любая идея, как я могу это сделать с помощью jquery? – Prabhu

Смежные вопросы