asp.net-mvc - MVC Entity Framework 验证以防止重复记录

标签 asp.net-mvc entity-framework validation

您好,我是 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/

相关文章:

c# - ViewModel 在发布时丢失数据

c# - MVC - 根据用户的权限禁用大约一半的字段

c# - 当我通过我的存储库更新时,我的一个实体没有保存在 Entity Framework 中

.net - Entity Framework 子查询

c# - AspNetCore.Identity 不适用于自定义用户/角色实现

javascript - 在 Angular js 中提交时需要进行字段验证

asp.net-mvc - Asp.Net Mvc 无法注销

c# - 模型类中的 EF 上下文

asp.net-mvc - 如何在 ASP.NET MVC 2 RC 中编写自定义客户端 jQuery 验证?

java - 如何使用 Spring MVC 在 DTO 上绑定(bind)日历