asp.net-mvc – POST数据中不包含MVC 3远程验证表单按钮
我有一个ASP.NET MVC3应用程序,并在我的一个模型类上进行远程验证.我发现如果在提交表单之前打开该模型的编辑视图并且未调用远程验证例程(由于没有编辑带有远程验证的字段),则按钮单击以POST表单不包括在请求发送到Action方法的数据.
如果在表单发布之前调用远程验证例程 – 单击该按钮以提交POST中包含的表单IS. 我需要知道在服务器上调用Action时单击了哪个按钮,以便我可以确定用户是否单击了UPDATE或CANCEL. 如果我从模型中删除远程验证,则表单每次都会正确提交. 为什么在表单提交之前未调用远程验证时,用于提交表单的按钮将从表单发布中排除. 谢谢 以下是一些示例代码: @model Channel <script src="@Url.Content("~/Scripts/jquery-1.6.1.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm()) { <fieldset> <legend>Edit Channel</legend> @Html.HiddenFor(model => model.ChannelGUID) <div class="editor-label">Name</div> <div class="editor-field"> @Html.EditorFor(model => model.Name) @Html.ValidationMessageFor(model => model.Name) </div> <div class="editor-label">Description</div> <div class="editor-field"> @Html.EditorFor(model => model.Description) @Html.ValidationMessageFor(model => model.Description) </div> <div class="editor-label">Channel Code</div> <div class="editor-field"> @Html.EditorFor(model => model.Code) @Html.ValidationMessageFor(model => model.Code) </div> <p> <button type="submit" name="updateCommand" value="Update">Update</button> <button type="submit" class="cancel">Cancel</button> </p> </fieldset> } 这是行动 [HttpPost] public ActionResult Edit(string updateCommand,Channel channel) { if (updateCommand != null) { //update clicked } else { //cancel clicked } 这是模型属性Code的远程属性 [Remote("IsChannelCodeUnique","Channel",AdditionalFields = "ChannelGUID",ErrorMessage = "code must be unique")] 解决方法
我遇到了同样的问题.我将远程验证添加到具有两个提交输入的表单,并且单击的提交按钮的值不再总是发布.
虽然其他答案提供了解决方法,但我深入研究了一下,并回答了您提出的实际问题:“为什么用于提交表单的按钮会在未在之前调用远程验证时从表单发布中排除表格提交.“ 我知道一个Javascript Submit does not include the Submit Button Value.因此,我试图发布禁用javascript.验证无效,但我的提交价值已过帐.我假设jquery.validate.js跳入并发送程序化提交.确实如此.这是使用jquery.validate.js 1.9.0,未压缩的情况: >加载页面时,在第942行,使用远程方法扩展验证器,使用stopRequest原型在第735行扩展验证器. 更仔细地查看验证扩展的方式,我在第59行找到了一个处理程序的定义,它似乎旨在克服一些类似的问题:它添加了一个隐藏的输入,其中包含它所处理的提交按钮的名称和值.但是,在我的情况下,既没有定义validator.settings.submitHandler也没有定义validator.submitButton,因此永远不会调用此代码. 如果在这种情况下添加了这个隐藏字段会很好,因为MVC不知道也不关心发布值的输入类型和控制器上的post操作可以只使用该值. 加成 $('input[type="submit"]').click(function () { var hidden = $("<input type='hidden'/>").attr("name",this.name).val(this.value).appendTo($(this).closest("form")); }); 隐藏字段已创建,因此我不必依赖具有正确名称的隐藏字段.您可以为您的提交提供相同的名称,并测试该值,或者为它们指定不同的名称并测试是否存在post参数.当然,您还需要使用尚未使用的表单字段名称. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- asp.net-mvc – 将CSS添加到视图或部分视图
- asp.net-mvc – ASP.NET MVC:在回发上更改模型的属性
- asp.net-mvc-3 – MVC3 – 编译的Razor视图找不到_ViewStar
- asp.net – 当绑定到XmlDataSource时如何编程设置Dropdownl
- asp.net-mvc-3 – ASP.net MVC路由与可选的第一个参数
- asp.net-mvc – 我应该在ASP.NET MVC3中附加自定义用户上下
- asp.net – 什么是Eval(“this”)的正确等价物
- .NET生成服务引用时加载错误的程序集
- asp.net分页控件AspNetPager的样式美化
- asp.net-web-api – ASP.NET Web API中的回调方法
- asp.net-core – EntityFramework核心数据库首先
- asp.net-mvc – 在ASP.Net中路由保留字
- asp.net – 如何尊重“从无Cookie域中提供静态内
- 使用ASP.Net MVC 1.0安装nUnit
- ASP.Net MVC与Classic ASP(不是ASP.Net – 原始A
- asp.net-mvc – View()vs. PartialView()
- ActiveDirectory ASP.NET中的当前用户名
- asp.net – 在LINQ-to-SQL中运行映射存储过程方法
- asp.net-core – 如何在ASP.NET 5中使用JavaScri
- ASP.NET调试模式是否存在安全风险?