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

发布于 2024-10-11 00:37:26 字数 1214 浏览 3 评论 0原文

我有一个按钮,其代码是这样生成的:

 <% 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 事件编辑(Int32,Int32)'中 'TechRun.UI.Controllers.CustomersController'。 可选参数必须是 引用类型、可为 null 的类型,或者是 声明为可选参数。 参数名称:参数

任何想法我做错了什么(该表单上还有其他发布按钮,但它们工作正常)。 谢谢。

I have a button who's code is generated like this:

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

The actual code generated:

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

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

But the buttons calls this address:

http://localhost:20588/Customers/EventEdit

and I get:

The parameters dictionary contains a
null entry for parameter 'EventID' of
non-nullable type 'System.Int32' for
method 'System.Web.Mvc.ActionResult
EventEdit(Int32, Int32)' in
'TechRun.UI.Controllers.CustomersController'.
An optional parameter must be a
reference type, a nullable type, or be
declared as an optional parameter.
Parameter name: parameters

Any Idea what am I doing wrong (there are other post buttons on that form, but they work ok).
Thanks.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

雪落纷纷 2024-10-18 00:37:26

尝试这样

<% 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,用户代理采用
action 的值,附加一个‘?’到
然后附加表单数据集,
使用编码
“应用程序/x-www-form-urlencoded”
内容类型。

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

Try like this:

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

Also make sure that there's no some javascript that could interfere with the form submission sending an AJAX request and forgetting to include the values. And finally make sure that Model.customer.CustomerID is not empty. Use FireBug to see exactly what is the request being sent to the server.


UPDATE:

According to the specification:

If the method is "get" and the action
is an HTTP URI, the user agent takes
the value of action, appends a `?' to
it, then appends the form data set,
encoded using the
"application/x-www-form-urlencoded"
content type.

This means that you should not use query string parameter in the form action with GET method. You need to use hidden fields inside the form to pass those values to the server.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文