asp.net-mvc-5 – MVC5 RadioButtonFor模型属性未正确绑定
发布时间:2020-12-16 06:50:29 所属栏目:asp.Net 来源:网络整理
导读:我正在使用MVC5和Razor视图.我的viewmodel有一个类型为nullable enum的属性.我让它可以为空,这样当用户加载页面时,他们必须选择一个选项,并在他们没有选择任何内容时进行验证. public class PaymentViewModel{ [Required(ErrorMessage = "Please select a pa
我正在使用MVC5和Razor视图.我的viewmodel有一个类型为nullable enum的属性.我让它可以为空,这样当用户加载页面时,他们必须选择一个选项,并在他们没有选择任何内容时进行验证.
public class PaymentViewModel { [Required(ErrorMessage = "Please select a payment method",AllowEmptyStrings = false)] public PaymentType? SelectedPaymentType { get; set; } } public enum PaymentType { CreditCard,DirectDebit } 在我看来,我有一个表单,我正在调用提交,然后调用控制器操作作为帖子. 我的观点的相关部分如下所示: <div class="row button-group" data-toggle="buttons"> <div class="col-xs-6"> <label class="btn btn-tertiary"> @Html.RadioButtonFor(model => model.SelectedPaymentType,PaymentType.CreditCard,new {@Name = "payment-method",@Value = "credit",@Id="rdoCredit"}) Credit Card </label> </div> <div class="col-xs-6"> <label class="btn btn-tertiary"> @Html.RadioButtonFor(model => model.SelectedPaymentType,PaymentType.DirectDebit,@Value = "debit",@Id="rdoDebit"}) Direct Debit </label> </div> </div> 由于某种原因,我的model.PaymentType上的值始终为null,即使我选择了一个单选按钮.我添加了@Id属性,因为我注意到它被赋予了相同的Id,如果我没有指定一个但没有帮助. 我还测试了另一个字符串属性在帖子上发布,因此它似乎特定于此属性/单选按钮组. 如果我使该属性不可为空,则将其设置为CreditCard(作为枚举的第一个值),如果我选择DirectDebit无线电选项并提交表单,它仍然表示它是CreditCard. (我确信我可以更好地做标签,但我现在关心的是让绑定正常工作 编辑.生成的HTML是: <form method="post" action="/myapplication/payment" novalidate="novalidate"> .... <div data-toggle="buttons" class="row button-group"> <div class="col-xs-6"> <label class="btn btn-tertiary"> <input type="radio" checked="checked" value="credit" name="payment-method" id="rdoCredit"> Credit Card </label> </div> <div class="col-xs-6"> <label class="btn btn-tertiary"> <input type="radio" value="debit" name="payment-method" id="rdoDebit"> Direct Debit </label> </div> </div> ... </form> 解决方法
您将name属性呈现为name =“payment-method”,但它应该是SelectedPaymentType以匹配您的模型属性名称.删除{@name =“payment-method”,您也不需要value属性
为了更好的可用性(使用< label>) @Html.RadioButtonFor(m=> m.SelectedPaymentType,new {@Id="rdoCredit"}) <label for="rdoCredit">Credit Card</label> @Html.RadioButtonFor(m=> m.SelectedPaymentType,new {@Id="rdoDebit"}) <label for="rdoDebit">Direct De</label> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net-mvc-3 – FluentValidation – 验证跨多个属性
- DELETE语句与ASP.NET动态数据中的REFERENCE约束冲突
- asp.net – 将JSON对象反序列化为列表不能使用asmx服务
- 在asp.net应用程序中管理与数据库的连接
- asp.net-mvc – 使用Razor,如何使所有“bool?”属性显示为
- 我可以在ASP.NET应用程序中禁用IP地址(或一系列地址)吗?
- asp.net-mvc – TryUpdateModel的实例,ASP .NET MVC 3
- 为什么asp.net会员资格有用户表和会员表?
- 在Azure中为ASP.NET Core Web应用程序设置SQL连接字符串
- asp.net – 如何向python中的.aspx页面提交查询
推荐文章
站长推荐
- asp.net-mvc – 无法加载指定的元数据资源
- log4Net EventlogAppender不适用于Asp.Net 2.0 W
- asp.net-mvc – 对MVC中的模型进行条件验证
- asp.net – 在MVC5应用程序中使用OWIN软件包的好
- asp.net – Firefox和Chrome之间的1像素线高差
- .net – Ninject的InRequestScope发生了什么事
- asp.net-mvc-3 – 在MVC3中设置所选选项
- asp.net – 禁用Durandal内联样式
- asp.net – 在RedirectToAction调用中传播QueryS
- asp.net-mvc – 什么是MVC 5的会员提供商?
热点阅读