ASP.NET MVC验证在加载页面后显示错误

时间:2015-02-09 19:52:54

标签: c# jquery validation asp.net-mvc-5

ASP.NET MVC验证在加载页面后显示错误(在ValidationSummary中),我想在点击"提交"之后显示它。按钮。我的代码是:

布局:

<html lang="en">
<head>
    @Styles.Render("~/Content/css")
    @RenderSection("head", required: false)
    @Scripts.Render("~/bundles/modernizr")
</head>
<body>
    @RenderBody()

    @Scripts.Render("~/bundles/jquery")
    @Scripts.Render("~/bundles/bootstrap")
    @RenderSection("scripts", required: false)
</body>
</html>

页:

@{
    Layout = "~/Views/Shared/_Layout.cshtml";
}

@using (Html.BeginForm())
{
    @Html.AntiForgeryToken()
    @Html.ValidationSummary()
....
}

@section Head {
    @Styles.Render("~/styles/jquery-ui-bootstrap-custom-theme")
}

@section Scripts {
    @Scripts.Render("~/bundles/jqueryval")
    @Scripts.Render("~/bundles/jqueryui")

捆绑文件有:

    bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
                "~/Scripts/jquery-{version}.js"));

    bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
                "~/Scripts/jquery.validate*"));

控制器:

        public ActionResult VacancyForm(int? ID, VacancyFormViewModel model)
        {
            VacancyFormViewModel model = new VacancyFormViewModel();
....
            return View(model);
        }

1 个答案:

答案 0 :(得分:2)

GET方法中不应该有一个复杂对象的参数(在您的情况下为VacancyFormViewModel)。除了创建的丑陋的查询字符串之外;

  1. 如果模型包含大量属性或属性 long值,它将超过查询字符串限制并抛出一个 除外;
  2. 如果模型包含复杂对象的属性或 集合,然后绑定将失败(内部路由值 字典是根据ToString()的值生成的 属性)
  3. 在您的情况下,DefaultModelBinder初始化VacancyFormViewModel的新实例并设置其属性的值(根据以上几点可能成功也可能不成功)。由于您在一个或多个属性上具有验证属性,因此这些错误会添加到ModelState,因此会显示在表单中。

    如果该方法用于创建新的VacancyFormViewModel,则只需在方法中初始化模型的新实例。如果用于编辑现有VacancyFormViewModel,则将ID作为参数传递,并根据ID从存储库中获取对象。