1

我有一个页面,我想要一个包含一些详细信息的项目列表(标题项目)以及一个查看链接和一个编辑它们的链接。此外,在列表顶部,我想要一个表单来获取基本详细信息(开始和结束日期)并使用该数据创建一个新的标题项。

我做了什么:

  • 创建了一个标头控制器
  • 创建了一个索引视图(获取项目列表)
  • 创建了一个 startHeader 视图(有一个带有开始、结束日期和一个按钮的表单,表单的 actionName 为“addHeader”)
  • 为开始和结束日期添加了“ValidationMessageFor”
  • 将 startHeader 视图作为部分视图添加到索引视图

除了一些验证外,一切似乎都正常工作。必填字段验证似乎按预期工作(即,如果您没有输入开始日期并单击显示“需要开始日期”的按钮)。

但是,我添加了一些似乎不起作用的额外验证:

  • 将 IValidatableObject 接口添加到头类
  • 添加了验证码

    if (this.StartDate > this.EndDate) { yield return new ValidationResult("开始日期必须早于结束日期。", new[] { "StartDate" }); }

  • 当按下按钮时,此代码按预期运行
  • 但是它不会停留在索引屏幕上并显示验证消息
  • 而是通过 addHeader 视图
  • 我曾期望这与所需的字段验证一样工作并显示验证消息

我在这里缺少什么吗?

  • 为什么此验证正在运行,但不显示错误消息?
  • 我是否需要添加一些内容才能使此验证运行并保留在页面上?
  • 有没有更好的方法来做这样的事情?
4

1 回答 1

1

可能是您的必填字段验证正在通过Unobtrusive Client Validation显示(您的模型可能包含数据注释[Required])。此验证通过 JavaScript 在客户端运行,因此根本不会回传到服务器。

相反,您编写的验证代码在表单回发到服务器之后运行。您需要在 addHeader() 方法中捕获它。这些方面的东西:

[HttpPost]
public ActionResult addHeader(addHeader model)
{
    if (!ModelState.IsValid)
    {
        return View();
    }
    else
    {
        //Do Work to add your header...
        return View("Index");
    }
}

只要您@Html.ValidationSummary(true)在视图中,它就会自动显示 ValidationResult。有关更多详细信息,请参阅此内容。

于 2012-08-03T19:18:30.763 回答