我有一个按钮,其代码生成如下:
<% 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&CustomerID=1" method="get">
<button type="submit">
new event</button>
</form>
但按钮调用此地址:
我得到了:
参数字典包含一个 参数'EventID'的null条目 非可空类型'System.Int32' 方法'System.Web.Mvc.ActionResult EventEdit(Int32,Int32)'in 'TechRun.UI.Controllers.CustomersController'。 可选参数必须是a 引用类型,可空类型或者是 声明为可选参数。 参数名称:参数
任何想法我做错了什么(该表格上还有其他帖子按钮,但它们可以正常工作)。 感谢。
答案 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可以准确查看发送到服务器的请求。
更新:
如果方法是“get”和动作 是一个HTTP URI,用户代理 行动的价值,附加一个“?”至 它,然后附加表单数据集, 用。编码 “应用程序/ x WWW的形式进行了urlencoded” 内容类型。
这意味着您不应该在使用GET方法的表单操作中使用查询字符串参数。您需要使用表单中的隐藏字段将这些值传递给服务器。