加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > asp.Net > 正文

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>

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读