为什么我的ValidationMessageFor For TextArea在页面加载时显示

时间:2012-03-09 20:11:27

标签: c# asp.net-mvc-3 razor validation

当我的页面加载我的ValidationSummary和ValidationMessageFor(model => model.TestNumbersString)时,尽管只是几乎没有加载页面,但都显示验证错误。我已经检查过.css文件是在我的_Layout.cshtml中引用的,并且它的样式是存在的。

Model.cs

[Required]
public string TestNumbersString { get; set; }

HomeController.cs

public ActionResult Index(TestModel model)
{
    return View(model);
}

partialView.cshtml

@using (Html.BeginForm("Index", "Home", FormMethod.Post, new { @class = "form" }))
{
    @Html.TextAreaFor(model => model.TestNumbersString, new { @class = "testBox" })
    @Html.ValidationMessageFor(model => model.TestNumbersString)
}

我的布局我注意到有一些javascript和css文件,但其他验证在页面上工作,我知道site.css是为页面的其他部分加载的(但不是我的表单,但那是另一个问题)。

_Layout.cshtml

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script>
<link href="@Url.Content("~/Content/Site.css")" rel="stylesheet" type="text/css" />

我到目前为止所做的故障排除让我发现验证消息的类是字段验证错误。所以我认为它不是.css错误(即使css样式没有正确应用)。

我也想明确这是一个局部布局。我不确定在处理验证时是否会引起其他问题。

编辑:解决方案

感谢@jacqijvv提供解决方案。

public ActionResult Index()
{
    TestModel model = new TestModel();
    return View(model);
}

[HttpPost]
//We have these separate as this is the design for MVC.
public ActionResult Index(TDMixParametersViewModel model)
{
    if (ModelState.IsValid)
        return View(model);
    else
    {
        model = new TDMixParametersViewModel();
        return View(model);
    }
}

2 个答案:

答案 0 :(得分:6)

从操作方法调用中删除参数

E.g。

    public ActionResult Index()
    {
        TestModel model = new TestModel();
        return View(model);
    }

那应该解决问题

答案 1 :(得分:0)

您的css文件是否包含在页面顶部?建议将css文件放在head的顶部,将javascript文件放在body的末尾

尝试将site.css文件放在_layout.cshtml

中的JavaScript文件之前