0

我有一个查询来测试有效的邮政编码条目:

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 以获得正确响应的任何建议?

4

1 回答 1

0

你可以试试:

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属性,但我不太确定在验证属性内访问数据库是否是一种好的/推荐的方法.

于 2015-03-20T16:23:53.137 回答