MVC4 - 过早开始的不显眼的验证

时间:2012-10-23 15:16:19

标签: asp.net-mvc-4 data-annotations unobtrusive-validation

我有一个HTML表单,在我的网站上使用不显眼的验证,这是一个ASP.Net MVC4应用程序。我认为的形式很简单,如下所示

@Using (Html.BeginForm())
{
  @: Listing for @ViewBag.itemNumber
  @Html.TextBoxFor(model=>model.Name)
  @Html.TextBoxFor(model=>model.Location)
  @:<input type="submit" value="Save" />
}

我的控制器如下所示

public ActionResult test()
{
  string itemNumber = Request.params["item"];
  ViewBag.itemNumber = itemNumber;
  return View();
}

我的模特是

public class item
{
 [StringLength(10, ErrorMessage = "The Name should be atleast 3 characters in length", MinimumLength = 3)]
 public string Name {get;set;}
 public string Location {get;set;}
}

我遇到的问题是,即使在我的第一个表单提交之前,只要页面加载,这种不引人注目的验证就会启动。由于最小长度验证,一旦我开始键入,Name的文本框就会变为红色。我已成功使用不显眼的验证,并且在同一网站的其他页面上没有此问题。由于我的控制器中的代码从URL GET参数中检索值并将其设置在Viewbag中,我怀疑验证在这个特定页面上很早就开始了。我的假设是否正确?如果是,我怎样才能阻止验证在此页面上过早启动?

编辑:我的页面上有以下javascript库,顺序如下:

<script src="~/Scripts/jquery-1.8.2.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery-ui-1.9.0.min.js" type="text/javascript"></script>
<script src="~/Scripts/jQuery.tmpl.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js" type="text/javascript"></script>
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js" type="text/javascript"></script>

2 个答案:

答案 0 :(得分:4)

您描述的是默认行为!默认情况下,字段也会在onKeyUp上进行验证。对于必填字段,这种情况不会发生,因为当密钥启动时,文本框不再为空!所以也许你对所需的现场案例的行为感到困惑。 无论如何,您可以禁用keyUp验证。请在此处查看您可以更改的插件的完整选项:http://docs.jquery.com/Plugins/Validation/validate#toptions

答案 1 :(得分:0)

您能告诉我们您呈现的HTML页面(即查看来源)吗?

我有兴趣查看您正在使用的.js包。

也许您正在使用旧的/错误的jquery-1....js包。我刚刚使用jquery-1.6.2.js版本(仅供参考:最新版本为1.8.2)测试了您的示例代码,并且不引人注目的js按预期工作。

您的问题的症状当然听起来像是客户端问题(JavaScript),因此能够看到您呈现的网页可以帮助我们。

顺便说一下;你的代码示例仍然有拼写错误。您的View代码应如下所示:

@using(Html.BeginForm())
{
  @ViewBag.itemNumber
  @Html.TextBoxFor(model=>model.Name)
  @Html.TextBoxFor(model=>model.Location)
  <input type="submit" value="Save" />
}

<强>更新 我根据你发布的内容创建了一个MVC 4应用程序。这是呈现的HTML。

注意我包含的JavaScript包。您的问题很可能是因为缺少js包。

   <!DOCTYPE html>
    <html>
    <head>
        <meta charset="utf-8" />
        <meta name="viewport" content="width=device-width" />
        <title>test</title>
        <link href="/Content/site.css" rel="stylesheet" type="text/css" />
        <script src="/Scripts/jquery-1.6.2.js" type="text/javascript"></script>
        <script src="/Scripts/jquery.validate.js" type="text/javascript"></script>
        <script src="/Scripts/jquery.validate.unobtrusive.js" type="text/javascript"></script>
    </head>
    <body>


    <h2>test</h2>
    <form action="/" method="post">
<input data-val="true" data-val-length="The Name should be at least 3 characters in length" data-val-length-max="10" data-val-length-min="3" id="Name" name="Name" type="text" value="" />
<input id="Location" name="Location" type="text" value="" />  
<input type="submit" value="Save" />
    </form>
    </body>
    </html>