asp.net mvc Ajax.BeginForm - PullRequest
       10

asp.net mvc Ajax.BeginForm

16 голосов
/ 08 апреля 2010

У меня проблемы с Ajax.BeginForm

У меня как-то так в представлении

  <% using (Ajax.BeginForm("ActionName", null , null, new { id = "FormName" }))
     {%>
      <input type="hidden" value = '<%= Html.Encode( Model.id) %>' name="id"/>
      <textarea id="message" name=message rows="4" style="width: 90%"> 
      </textarea>
  <% }%}

А метод действия примерно такой

    [AcceptVerbs(HttpVerbs.Post)]
    [Authorize]
    public ActionResult ActionName(int id, string message)
    {
     ....
    }

Я пытаюсь передать id и message в метод действия. Я передаю 'null' для routeValues, но я не знаю, что передать. В идеале я пытался найти перегрузку, которая не требовала бы значений маршрута, но взяла actionName и htmlattributes (для имени формы), но я не смог ее найти. Я не хочу добавлять 'message' в модель представления, и мне нужно FormName там для операций jquery. Как лучше всего обойти эту проблему?

О, я забыл упомянуть, вот как я отправляю форму

 $.post($("#FormName").attr('action'), $("#FormName").serialize(),
                               function(result) {
                                   $("#correspondingDiv").html(result);
                               }
                            );

Ответы [ 2 ]

32 голосов
/ 08 апреля 2010

Используйте эту перегрузку: http://msdn.microsoft.com/en-us/library/dd470605.aspx

Ajax.BeginForm(
    string "ActionName",
    string "ControllerName",
    new routevalues {id="IDValue",message="MyMessage"},
    new AjaxOptions {OnBegin=[someFunction], OnFailure=[failureFunction] },
    new { id = "FormName" }
)
0 голосов
/ 08 апреля 2010

Попробуйте:

  <% using (Ajax.BeginForm("ActionName", null))
     {%>
      <input type="hidden" value = '<%= Html.Encode( Model.id) %>' name="id"/>
      <textarea id="message" name=message rows="4" style="width: 90%"> 
      </textarea>
  <% }%}

Я думаю, что вы чрезмерно усложняете проблему, ID и Сообщение будут заполняться при обратной передаче из полей формы, поэтому вам не нужно указывать их в объявлении формы. Вы также можете попробовать Html.BeginForm(), если вы действительно не хотите ответа Ajax.

...