ASP.NET MVC2 Post按钮具有正确的值,但不会将值发送到操作

时间:2011-01-07 10:46:46

标签: asp.net-mvc-2

我有一个按钮,其代码生成如下:

 <% RouteValueDictionary dictionary2 = new RouteValueDictionary(); %>
        <% dictionary2.Add("EventID",0); %>
        <% dictionary2.Add("CustomerID",Model.customer.CustomerID.ToString()); %>
        <% using (Html.BeginForm("EventEdit", "Customers", dictionary2,FormMethod.Get,null ))
                   { %>
        <button type="submit">
            new event</button>
        <%} %>

生成的实际代码:

<form action="/Customers/EventEdit?EventID=0&amp;CustomerID=1" method="get">

                <button type="submit">
                    new event</button>
                </form>

但按钮调用此地址:

  

http://localhost:20588/Customers/EventEdit

我得到了:

  

参数字典包含一个   参数'EventID'的null条目   非可空类型'System.Int32'   方法'System.Web.Mvc.ActionResult   EventEdit(Int32,Int32)'in   'TechRun.UI.Controllers.CustomersController'。   可选参数必须是a   引用类型,可空类型或者是   声明为可选参数。   参数名称:参数

任何想法我做错了什么(该表格上还有其他帖子按钮,但它们可以正常工作)。 感谢。

1 个答案:

答案 0 :(得分:1)

尝试like this

<% using (Html.BeginForm(
    "EventEdit", 
    "Customers", 
    new { EventId = "0", CustomerID = Model.customer.CustomerID }, 
    FormMethod.Get))
{ %>
    <input type="submit" value="new event" />
<% } %>

还要确保没有一些javascript会干扰表单提交发送AJAX请求而忘记包含值。最后确保Model.customer.CustomerID不为空。使用FireBug可以准确查看发送到服务器的请求。


更新:

根据specification

  

如果方法是“get”和动作   是一个HTTP URI,用户代理   行动的价值,附加一个“?”至   它,然后附加表单数据集,   用。编码   “应用程序/ x WWW的形式进行了urlencoded”   内容类型。

这意味着您不应该在使用GET方法的表单操作中使用查询字符串参数。您需要使用表单中的隐藏字段将这些值传递给服务器。