在MVC5中基于服务器端查询结果设置ModelState

时间:2015-03-20 16:04:06

标签: model-view-controller modelstate server-side-validation

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

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

1 个答案:

答案 0 :(得分: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属性,但我不确定是否在验证中访问数据库属性将是一个好的/推荐的方法。