【问题标题】:ASP.NET MVC Server Side Validation With Dynamically Appended Input带有动态附加输入的 ASP.NET MVC 服务器端验证
【发布时间】:2018-12-11 02:50:26
【问题描述】:

我目前正在构建一个 ASP.NET MVC 项目,但遇到了一些问题。我有一个由简单输入和网格输入组成的表单,看起来像这样

Invoice Code: XXX 
Customer: XXX 
Email: XXX

Item Code | Quantity | Price | 
XXX       | XXX      | XXX   |

使用 jquery 和局部视图动态附加列表的项目行。

现在我想对表单进行服务器端验证,我阅读了一个指南,我必须在 [HttpPost] 操作中添加模型状态错误,然后将提交的模型连同错误一起返回给视图,例如这个:

[HttpPost]
    public ActionResult New(Invoice InvoiceVM)
    {
        if (!ModelState.IsValid)
        {
            ModelState.AddModelError("INV_QUAN", "QUANTITY INVALID!");
            return View(InvoiceVM);
        }
        var INV_ID = SaveInvoice.NewInvoice(InvoiceVM);
        return RedirectToAction("Index");
    }

但是当验证被一个无效的输入触发并且它试图连同错误一起返回视图时,视图显然被刷新到没有列表行的表单,因为列表的行项目是动态附加的。

谁能帮我解决这个问题,我如何返回到表单中已经插入了行项目的视图。或者有没有关于我的问题的解决方法?谢谢。

Ps: 对不起英文不好

【问题讨论】:

    标签: c# asp.net-mvc


    【解决方案1】:

    您可以使用 ajax 发送表单,然后返回重定向 url 或错误并将其动态附加到表单中,如下所示:

    Returning Partialview & JSON from MVC 5 Controller

    MVC Return Partial View as JSON

    【讨论】:

      【解决方案2】:

      您必须更改模型并将所有需要的数据存储在其中。

       public class SomeModel {
      public Invoice InvoiceVM {get; set;}
      public IList<SomeType> SomeData {get; set;}
      }
      

      在发送给视图之前填写模型:

          public ActionResult New(Invoice InvoiceVM)
          {
      if (!ModelState.IsValid)
              { var model = new SomeModel {InvoiceVM =InvoiceVM;
                 SomeData = _someService.GetData()};
                  ModelState.AddModelError("INV_QUAN", "QUANTITY INVALID!");
                  return View(model);
              }
      

      【讨论】:

        猜你喜欢
        • 2013-01-28
        • 2013-10-09
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-06-07
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多