asp.net mvc Ajax.BeginForm
Asked Answered
V

2

16

I'm having some difficulties with Ajax.BeginForm

I have something like this in a view

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

And the action method is something like this

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

I'm trying to pass the 'id' and 'message' to the action method. I'm passing 'null' for routeValues but I dont know what to pass. Ideally I was trying to find an overload that did not require route values but took actionName and htmlattributes (for form name) but I could not find one.I don't want to add 'message' to the view-model and I do need the FormName in there for jquery operations. What is the best way to work around this problem ?

Oh, I forgot to mention, This is how I post the form

 $.post($("#FormName").attr('action'), $("#FormName").serialize(),
                               function(result) {
                                   $("#correspondingDiv").html(result);
                               }
                            );
Vorfeld answered 8/4, 2010 at 13:11 Comment(0)
B
32

Use this overload: 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" }
)
Bedbug answered 8/4, 2010 at 13:24 Comment(2)
When I try this solution, the controller action method gets called but it still has the initial route values that are defined in BeginForm and not the ones filled out in the form. Any thoughts ?Vorfeld
There is no way using the Ajax.BeginForm to populate the values from your form, because the BeginForm helper is called when the page is rendered. You can get the values of the form fields using Request.Form.Bedbug
R
0

Try:

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

I think you are over-complicating the the issue, ID and Message will get populated on the postback from the fields in the form so you don't need to specify them in the form declaration. You might also want to try Html.BeginForm() instead unless you really want an Ajax response.

Radiometeorograph answered 8/4, 2010 at 13:20 Comment(1)
I do need Ajax response and I also said I need to mention the FormName in Ajax.BeginForm as I have multiple forms in the page.Vorfeld

© 2022 - 2024 — McMap. All rights reserved.