【问题标题】:ASP.Net MVC Using AddModelError with multiple ValidationSummary for querystring validationASP.Net MVC 使用带有多个 ValidationSummary 的 AddModelError 进行查询字符串验证
【发布时间】:2015-10-29 18:32:30
【问题描述】:

我有两个表单,每个表单都包含自己的视图

@Html.ValidationSummary()

当页面加载时,查询字符串参数被检查,如果存在我调用:

ModelState.AddModelError("", "Querystring error");

但是,即使我在表单模型中指定了属性,这也会导致错误消息同时出现在 @Html.ValidationSummary() 中。

我有一个解决方法是在表单的模型中有一个单独的错误消息属性并填充它,然后如果它存在于标签中则显示它,但想知道是否可以指定一个单独的 @Html.ValidationSummary()在允许我使用ModelState.AddModelError的表格内?

【问题讨论】:

  • ValidationSummary 是每个模型,而不是每个 HTML 表单。如果您实际上在页面上有两个模型和两个验证摘要,请考虑使用部分视图。
  • 为了更好地理解你能否在 dotnetfiddle.net 中解释你的场景
  • 视图有一个模型,该模型被拆分为包含两个类,每个类都包含每个表单的属性。在这种情况下,也许部分视图是要走的路,我会看看,谢谢。
  • 好吧,我仍然理解我刚刚创建了一个小提琴..dotnetfiddle.net/GoMMhy,这是你所期待的吗?
  • @GSerg 在使用局部视图时,我如何确保对ModelState.AddModelError 的调用仅影响其中一个模型?当页面加载时,它会检查查询字符串,如果不正确,则调用ModelState.AddModelError,然后返回传入包含 2 个类的模型的视图,即每个表单的模型。目前我不确定使用局部视图如何解决我的问题。

标签: c# asp.net asp.net-mvc


【解决方案1】:

根据@GSerg 提供的有用信息,我想我会分享我的解决方案。

因此,我没有在同一个视图中使用两个表单,而是将每个表单拆分为两个单独的部分视图,并从主视图中调用每个视图...

@Html.Action("_RequestPartial")
@Html.Action("_LoginPartial")

每个局部视图都将包含要传递给它的模型和一个Html.BeginForm,里面有一个Html.ValidationSummary()

然后在 Controller 中,设置代码以正常返回视图(在本例中为 Index 视图)...

[HttpGet]
public ActionResult Index()
{
     return View();
}

然后对于局部视图,为每个带有 ChildActionOnly 注释的局部视图设置一个PartialViewResult...

[ChildActionOnly]
public PartialViewResult _RequestPartial()
{
      ... code that populates model you want to pass ...

      return PartialView(model);
}

[ChildActionOnly]
public PartialViewResult _LoginPartial()
{
      ... code that populates model you want to pass ...

      return PartialView(model);
}

希望这对某人有所帮助。

【讨论】:

    【解决方案2】:

    要显示具体的验证信息,请查看下面的 sn-p 代码。 控制器:

    [HttpGet]
            public ActionResult Index()
            {
                ModelState.AddModelError("Error1", "Querystring error");
                return View(new SampleViewModel());
            }
    

    查看:

    @Html.ValidationMessage("Error1")
    

    刚刚尝试创建一个小提琴以获得完整的图片。 https://dotnetfiddle.net/GoMMhy

    【讨论】:

    • 非常感谢您的努力,但那时视图中只有一个表单。我正在寻找具有两种形式的视图,因此需要两个 ValidationSummary(),因此我只需要引用其中一个 ValidationSummary()
    • 好吧,我明白了,有些人是这样想的stackoverflow.com/questions/5342427/…,对吧?
    • 类似,但我想根据查询字符串值在页面加载时抛出错误,而不是在单击提交按钮时。
    猜你喜欢
    • 2013-02-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-05-24
    • 2011-03-11
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多