您好,我是 MVC 和 EF 的新手,所以这可能是一个非常简单的问题,但是防止用户尝试输入重复记录的最佳方法是什么?
我有一个简单的查找表,其中一列是主键。我正在创建一个维护屏幕,以便管理员可以将额外的项目添加到查找列表中。我的 Controller 看起来像:
public ActionResult Index(string NewRow)
{
try
{
CaseType t = new CaseType { ID = NewRow };
if (ModelState.IsValid)
{
UOW.CaseTypes.Add(t);
UOW.Save();
}
}
catch (Exception ex)
{
ModelState.AddModelError("", ex.Message);
}
return View(UOW.CaseTypes.All());
}
这会停止重复记录并停止蓝屏死机,但显示的消息是:“更新条目时发生错误。有关详细信息,请参阅内部异常。”这对用户来说没有好处。
我只是想知道是否有更好的方法来捕获错误。
最佳答案
对于显示验证错误,我使用如下内容:
MainEmail 它是 ViewModel 的属性
var mod = ModelState.First(c => c.Key == "MainEmail"); // this
mod.Value.Errors.Add("Row's shouldn't duplicates."); // this
if (ModelState.IsValid)
{
return RedirectToAction("Details");
}
return View(client);
错误将显示在 View 中的此字段中:
<div class="editor-label">
@Html.LabelFor(model => model.MainEmail)
</div>
为了将来,您必须隐藏错误屏幕!您需要显示自定义错误页面:
如果您使用 asp-mvc-3,请在 web.config 中添加这样的字符串:
<system.web>
<customErrors mode="On" defaultRedirect="~/Error" />
...
用户将在/Shared/Error.cshtml 页面中插入带有异常消息的页面(可以显示顺序数据)。
添加
此处讨论了关于唯一约束创建的问题 Unique Constraint in Entity Framework Code First
您可以使用尝试代码检查记录重复。
在我的应用程序中,我首先使用代码,并且不添加唯一约束,因为它会导致可测试性较低。在这种情况下,请在保存更改之前使用简单的查找。
第一种方法稍微快一点。
方法二是成长可测试性。
关于asp.net-mvc - MVC Entity Framework 验证以防止重复记录,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7443416/