Jen*_*Jen 5 radiobuttonfor asp.net-mvc-5
我正在使用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
}
Run Code Online (Sandbox Code Playgroud)
在我看来,我有一个表单,我正在调用提交,然后调用控制器操作作为帖子.
我的观点的相关部分如下所示:
<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, new {@Name = "payment-method", @Value = "debit", @Id="rdoDebit"})
Direct Debit
</label>
</div>
</div>
Run Code Online (Sandbox Code Playgroud)
由于某种原因,我的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>
Run Code Online (Sandbox Code Playgroud)
小智 7
您将name属性呈现为name="payment-method"但应该SelectedPaymentType与模型属性名称匹配.删除{ @name = "payment-method",您也不需要该value属性
为了更好的可用性(有<label>)
@Html.RadioButtonFor(m=> m.SelectedPaymentType, PaymentType.CreditCard, new {@Id="rdoCredit"})
<label for="rdoCredit">Credit Card</label>
@Html.RadioButtonFor(m=> m.SelectedPaymentType, PaymentType.DirectDebit, new {@Id="rdoDebit"})
<label for="rdoDebit">Direct De</label>
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
13022 次 |
| 最近记录: |