Asp.net mvc 5 未正确绑定模型属性的MVC5 RadioButton
我正在使用MVC5和Razor视图。我的viewmodel具有类型为nullable enum的属性。我将其设置为空,这样当用户加载页面时,他们必须选择一个选项,并在没有选择任何内容时进行验证Asp.net mvc 5 未正确绑定模型属性的MVC5 RadioButton,asp.net-mvc-5,radiobuttonfor,Asp.net Mvc 5,Radiobuttonfor,我正在使用MVC5和Razor视图。我的viewmodel具有类型为nullable enum的属性。我将其设置为空,这样当用户加载页面时,他们必须选择一个选项,并在没有选择任何内容时进行验证 public class PaymentViewModel { [Required(ErrorMessage = "Please select a payment method", AllowEmptyStrings = false)] public PaymentType
public class PaymentViewModel
{
[Required(ErrorMessage = "Please select a payment method", AllowEmptyStrings = false)]
public PaymentType? SelectedPaymentType { get; set; }
}
public enum PaymentType
{
CreditCard,
DirectDebit
}
在我看来,我有一个表单,正在调用submit,它反过来调用一个控制器操作作为post
我的观点的相关部分如下所示:
<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>
@Html.RadioButton(model=>model.SelectedPaymentType,PaymentType.CreditCard,新的{@Name=“payment method”,@Value=“credit”,@Id=“rdoCredit”})
信用卡
@Html.RadioButton(model=>model.SelectedPaymentType,PaymentType.DirectDebit,新的{@Name=“payment method”,@Value=“debit”,@Id=“rdoDebit”})
直接借记
出于某种原因,my model.PaymentType上的值始终为空,即使我选择了单选按钮。我添加了@Id属性,因为我注意到,如果我没有指定一个,它将被赋予相同的Id,但这没有帮助
我还测试了帖子中的另一个字符串属性,因此它似乎特定于此属性/单选按钮组
如果我使属性不可为Null,它将被设置为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”,
您也不需要值
属性
为了更好的可用性(使用
)
@Html.radiobutton(m=>m.SelectedPaymentType,PaymentType.CreditCard,新的{@Id=“rdoCredit”})
信用卡
@RadioButton(m=>m.SelectedPaymentType,PaymentType.DirectDebit,新的{@Id=“rdoDebit”})
直接De
添加正在生成的html
@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>