在我的项目中,我有一个模型,你可以在这里看到我模型的一部分:
public class CheckoutModel
{
public bool OtherPlace { get; set; }
[RequiredIf("OtherPlace", true, ErrorMessage = " ")]
public string OtherPlaceFullName { get; set; }
[RequiredIf("OtherPlace", true, ErrorMessage = " ")]
public int OtherPlaceProvinceId { get; set; }
[RequiredIf("OtherPlace", true, ErrorMessage = " ")]
public string OtherPlaceCity { get; set; }
}
我使用 RequiredIf 属性在视图中验证我的模型,
if (!ViewData.ModelState.IsValid)
{
@Html.ValidationSummary(false)
}
我填写了表单的所有属性,但是当 OtherPlaceProvinceId 未填充时,我遇到了验证错误。
值'on'对于OtherPlace无效。
更新:控制器在这里:
[HttpGet]
public ActionResult CheckoutAccount()
{
var model = OrderManager.Instance.GetCheckoutAccount();
return View("_CheckoutAccount", model);
}
[HttpPost]
public ActionResult CheckoutAccount(CheckoutAccountModel model)
{
return View("_CheckoutAccount", model);
}
答案 0 :(得分:33)
OtherPlace是复选框吗?如果勾选了复选框,则默认值为on
&如果不是,则为空白。 ModelBinder不明白这一点。
如果您使用帮助程序,ASP.Net会处理此问题:
<input type="checkbox" name="OtherPlace" value="true"/>
<input type="hidden" name="OtherPlace" value="false"/>
模型绑定器现在将勾选出勾选的复选框,将其转换为布尔值&amp;将它绑定到您的模型。
您还可以使用带有true / false值的单选按钮
答案 1 :(得分:0)
分享我的案例和解决方案.. 在我的情况下,我使用jquery(Ajax post)将模型传递给控制器..
<input type="checkbox" id="OtherPlace" name="OtherPlace" value="true"/>
错误在于我得到了&#34; val()&#34; of OtherPlace而不是Checked属性
错:
var otherPlace = $('#OtherPlace').val();
正确:
var otherPlaces = $('#OtherPlace').prop('checked');
我希望这可能有所帮助
答案 2 :(得分:0)
诀窍是分配值并处理检查。 如其他答案所述,如果选中该复选框,则默认值为“ on”,否则为空白,但是您仍然可以覆盖它。
下面,我要处理选中的属性,还要分配一个值。我在用布尔?因为这通常会导致您遇到这类问题。如果您使用的是布尔类型,则可以改用标签助手。
<input type="checkbox" id="myBoolField" name="myBoolField" value="@(Model.myBoolField??false)" @(Model.myBoolField??false == true? "checked:checked":"") />
答案 3 :(得分:0)
当您的行为没有太多输入时,我将采取一些解决方法。
很简单,在提交表单之前,使用 'on'
字符串捕获输入并将其更改为true/false
值。
function toggle_validator(e) {
if ($('#OtherPlace').val() == 'on') {
$('#OtherPlace').val(true);
}
else {
$('#OtherPlace').val(false);
}
}
我们需要将此事件绑定到提交表单的按钮上。
<input type="submit" value="Save" class="btn btn-success" onclick="toggle_validator();" />
答案 4 :(得分:-3)
您应该将OtherPlaceProvinceId从int更改为int?,
public int? OtherPlaceProvinceId { get; set; }