我在包含模型验证消息的页面上遇到问题。
页面有一个搜索表单,模型是一个表示表单中项目的对象。当用户访问该页面时,邮政编码将自动填入控制器,然后将模型传递到视图中。
这会导致邮政编码字段的验证邮件显示,即使邮政编码格式正确。
以下是控制器中的代码:
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>
如果我尝试预填充任何其他字段,我会得到相同的验证问题 - 显示所有预填充的字段错误消息
非常感谢任何帮助,
谢谢。
答案 0 :(得分:2)
当您使用此方法签名时,LocatorSearch的默认绑定器会在调用函数中的任何代码之前执行验证:
public ActionResult WhereToBuyIndex(LocatorSearch searchOptions)
有几种方法可以解决错误,一种方法是在此函数上使用[HttpPost]属性,并使用一个没有参数的方法,以便在用户尚未提交搜索时填充默认值。
或者,您可以使用ModelState["Address"].Errors.Clear();
清除错误。这是一个更丑陋的解决方案。