我有这个 create view:
<div class="editor-field">
@Html.TextBoxFor(model => model.First, new { @id = "id1"})
@Html.ValidationMessageFor(model =>model.First)
</div>
和文本框后的提交按钮:
<input type="submit" value="Create" />
模型的一部分类看起来像这样:
public int? First { get; set; }
这是我的web.config:
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
因此,在发布该数据库之前,我需要先检查值是否已经在数据库中。如果数据库中的值已经添加一些错误。
我了解ModelState.AddModelError的部分,但是我无法获得的是:每次我检查值时,我都不会从数据库中获得结果,但是它检查表单文本框是否为空。
请帮忙。预先感谢。
一旦张贴值,您将需要在服务器端进行检查。
在这种情况下,您可以做的是运行查询以在页面发布后检查此问题...如果您的验证条件失败,则可以手动添加错误并返回相同的视图。向客户端,它看起来就像是通过不引人注目的验证来接收错误的一样。
我不确定您的数据层是如何设置的,因此我不会进入运行查询的详细信息,但是,这是您处理控制器中添加验证错误的方式...
ModelState.AddModelError("First", "Number in Use - Bad User!");
然后,您可以简单地将视图返回正常,他们将能够看到错误/更正问题
return View(model);
您可以在控制器中使用 First
值的记录手动检查。类似:
public ActionResult foo(X x)
{
var a= /* select where First=x.First */
if(a!=null)
{
ModelState.AddModelError(Params);
}
if (ModelState.IsValid)
/* rest of the code */
}
或
您可以在此答案中创建自己的自定义验证器:通过数据通道创建自定义验证?这里的另一个示例:MSDN