我有一个查询,用于测试有效的邮政编码条目:
using (_ctx)
{
try
{
var pc = _ctx.tblPostcodes.Where(z => z.Postcode == postcodeOutward)
.Select(x => new { postcodeId = x.PostcodeID }).Single();
pcId = pc.postcodeId;
}
catch (Exception)
{
pcId = 0;
Response.Redirect("./");
}
}
我不喜欢我这样做。它很笨拙,而且没有显示错误(这是我的第一个MVC项目)。
我宁愿它返回一个针对Postcode文本框的验证错误。我有各种输入错误的模型注释,但必须对照数据库检查邮政编码。
关于如何设置ModelState以获得正确响应,有什么建议吗?
您可以尝试:
if(this.ModelState.ContainsKey("postcodeOutward"))
this.ModelState.Add("postcodeOutward", new ModelState());
ModelState state = this.ModelState["postcodeOutward"];
state.Errors.Add("<error_message>");
state.Value = new ValueProviderResult(postcodeOutward, postcodeOutward == null ? "" : postcodeOutward.ToString(), CultureInfo.CurrentCulture);
您也可以尝试使用一个自定义验证属性,该属性将对数据库执行检查,并且应该自动填充this.ModelState
属性,但我不太确定在验证属性内部访问数据库是否是一种好的/推荐的方法。