【问题标题】:Post back Errors in MVC 4回发 MVC 4 中的错误
【发布时间】:2016-05-06 19:54:13
【问题描述】:

在常规的 Asp.Net 中,当您想要发布错误(例如重复 ID)时,我使用面板作为控件、错误消息标签等。我想知道如何使用 MVC 4 来实现相同的目的。

目前,在我的索引页面上,我有一个 Id、Name & Address 列和一个提交按钮。我的 HTTPPOST ActionResult 在这里:

 [HttpPost]
    public ActionResult Index(Person p)
    {
        if (ModelState.IsValid)
        {
            PersonInfo pi = new PersonInfo();

            var duplicate = from d in db.PersonInfoes
                where d.Id == p.Id
                select d;

            if (duplicate.Any())
            {
                return View("Duplicate");
            }
            else
            {....}

当我输入重复的 Id 时,在提交页面时,我需要发布到相同的视图(“索引”)页面,让用户知道已经有一个 Id,但目前,我正在重定向到不同的视图让用户知道是重复的,我认为这不是正确的方法。我正在学习 MVC,顺便说一句,因此有这个疑问。我在这里复制的cshtml:

    @{
       ViewBag.Title = "Duplicate";
     }

     <h2>Duplicate</h2>

     <h3>Duplicate ID found !!</h3>
     <p>Please correct the ID and re-enter !</p>
     <br/><br/>
     @Html.ActionLink("Back to Data Entry","Index")

任何指针都会有所帮助。

【问题讨论】:

    标签: asp.net-mvc-4


    【解决方案1】:

    您可以返回相同的视图。您应该考虑在模型状态字典中添加一个错误,以便您可以在 UI 中显示它。

    [HttpPost]
    public ActionResult Index(Person p)
    {
        if (ModelState.IsValid)
        {
          var duplicate=  db.PersonInfoes.Where(s=>s.Id== p.Id);
          if (duplicate.Any())
          {
             ModelState.AddModelError(string.Empty,"Duplicate found");
             return View(p);
          } 
          // to do : Your existing code
        }
        return View(p);
    }
    

    只需确保在索引视图中调用 ValidationSummary 方法即可显示此错误消息。

    @model Person 
    @using (Html.BeginForm())
    {
        @Html.ValidationSummary(false)
    
        <!-- Your form fields goes here-->
        <input type="submit" />
    }
    

    【讨论】:

    • 谢谢@Shyju,似乎很有趣的解决方案并且有效,除了,我必须弄清楚如何将错误添加到模型状态字典中。至少,现在不添加它,它会回发到包含字段中所有变量的同一视图..
    • ModelState.AddModelError(string.Empty,"Duplicate found"); 是您添加错误的方式。再次仔细阅读答案。
    • 是的,我添加了 ModelState.AddModelError(string.Empty,"Duplicate found");前。但是现在,在您了解之后,我添加了 @Html.ValidationSummary(false),现在错误显示为 Duplicate found。非常感谢,#Shyju,- 1 越过了,现在还有 9900 万;)
    猜你喜欢
    • 2013-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-28
    • 2013-11-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多