在MVC5中根据服务器端查询结果设置ModelState



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

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

相关内容

  • 没有找到相关文章

最新更新