ASP.NET MVC Ajax.BeginForm eats params of submit button clicked. Looks like bug.

Posted by RonnBlack on Stack Overflow See other posts from Stack Overflow or by RonnBlack
Published on 2009-04-24T20:47:44Z Indexed on 2010/03/30 22:23 UTC
Read the original article Hit count: 507

Filed under:
|

If you are using Ajax.BeginForm() with multiple submit buttons similar to this:

// View.aspx
<% using (Ajax.BeginForm("Action", "Controller", 
           new AjaxOptions { UpdateTargetId = "MyControl",  }))
{ %>
    <span id="MyControl">
       <% Html.RenderPartial("MyControl"); %>
    </span>
<% } %>

//MyControl.ascx
<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl" %>
<input name="prev" type="submit" value="prev" />
<input name="next" type="submit" value="next" />
//...

Everything is submitted to the controller fine but the params for the submit button that was clicked are absent from the Request. In otherwords Request["next"] and Request["prev"] are always null.

I looked in to the JavaScript in Microsoft.MvcAjax.js and it looks like the function Sys_Mvc_MvcHelpers$_serializeForm completely skips over the inputs that are of type 'submit'.

This doesn't seem logical at all. How else can you find out what button has been clicked?

It looks like a bug to me. Is there any logical reason to skip these form parameters?

© Stack Overflow or respective owner

Related posts about asp.net-mvc

Related posts about AJAX