预填模型时ASP.NET MVC验证问题
我在页面上出现问题,并提供了我的模型的验证消息。
该页面具有用于搜索的表单,并且该模型是表示表单中的项目的对象。 当用户访问该页面时,邮政编码会自动填充到控制器中,然后将模型传递到视图中。
这会导致邮政编码字段的验证邮件显示,即使邮政编码格式正确。
以下是控制器中的代码:
public ActionResult WhereToBuyIndex(LocatorSearch searchOptions)
{
if (searchOptions == null)
{
searchOptions = new LocatorSearch();
}
//ATTEMPT TO GET USER ZIP CODE
AppLib.Geolocation.Web.WebGeolocationService geoService = new AppLib.Geolocation.Web.WebGeolocationService();
searchOptions.Address = geoService.GeolocateToZipCode(Request.ServerVariables["REMOTE_ADDR"]);
if (searchOptions.Address == "00000") { searchOptions.Address = "90210"; }
ViewBag.Countries = LocatorService.Instance.LoadCountriesWithCustomers();
return View("Index", searchOptions);
}
并且视图中涉及zip字段的唯一行如下所示:
@Html.TextBoxFor(model => model.Address, new { id = "fAddress" })
<span class="failure">@Html.ValidationMessageFor(model => model.Address)</span>
如果我尝试预先填充其他字段,则会出现相同的验证问题 - 显示所有预填写的字段错误消息
任何帮助是极大的赞赏,
谢谢。
当您使用此方法签名时,LocatorSearch的默认绑定器将在调用该函数中的任何代码之前执行验证:
public ActionResult WhereToBuyIndex(LocatorSearch searchOptions)
有几种解决错误的方法,一种是在此函数上使用[HttpPost]属性,并使用一个没有参数的用户,以便用户尚未提交搜索时填充缺省值。
或者,您可以使用ModelState["Address"].Errors.Clear();
清除错误ModelState["Address"].Errors.Clear();
这是一个更丑陋的解决方案。