gpt4 book ai didi

jquery - MVC 3 客户端验证间歇性地工作

转载 作者:行者123 更新时间:2023-11-30 23:46:56 25 4
gpt4 key购买 nike

更新:如果您在 JavaScript 中设置至少一个断点,验证就会开始工作,但如果没有它则不起作用

更新:添加 jquery 标签,因为这可能会连接到验证插件

我有 MVC 3 版本,System.Web.Mvc 产品版本是:3.0.20105.0 修改于 2011 年 1 月 5 日 - i认为这是最新的。

我注意到客户端验证在我们正在创建的应用程序中并未像预期的那样工作,因此我进行了快速测试。

我使用 Internet 应用程序 模板创建了基本的 MVC 3 应用程序。

我添加了测试 Controller :

using System.Web.Mvc;
using MvcApplication3.Models;

namespace MvcApplication3.Controllers
{
public class TestController : Controller
{
public ActionResult Index()
{
return View();
}

public ActionResult Create()
{
Sample model = new Sample();

return View(model);
}

[HttpPost]
public ActionResult Create(Sample model)
{
if(!ModelState.IsValid)
{
return View();
}

return RedirectToAction("Display");
}

public ActionResult Display()
{
Sample model = new Sample();
model.Age = 10;
model.CardNumber = "1324234";
model.Email = "somedata@test.com";
model.Title = "hahah";

return View(model);
}
}
}

型号:

using System.ComponentModel.DataAnnotations;

namespace MvcApplication3.Models
{
public class Sample
{
[Required]
public string Title { get; set; }

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

[Required]
[Range(4, 120, ErrorMessage = "Oi! Common!")]
public short Age { get; set; }

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

还有 3 次浏览:

创建:

@model MvcApplication3.Models.Sample

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

<h2>Create</h2>

<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>

@*@{ Html.EnableClientValidation(); }*@

@using (Html.BeginForm()) {
@Html.ValidationSummary(false)
<fieldset>
<legend>Sample</legend>

<div class="editor-label">
@Html.LabelFor(model => model.Title)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Title)
@Html.ValidationMessageFor(model => model.Title)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.Email)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Email)
@Html.ValidationMessageFor(model => model.Email)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.Age)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Age)
@Html.ValidationMessageFor(model => model.Age)
</div>

<div class="editor-label">
@Html.LabelFor(model => model.CardNumber)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.CardNumber)
@Html.ValidationMessageFor(model => model.CardNumber)
</div>

<p>
<input type="submit" value="Create" />
</p>
</fieldset>

@*<fieldset>

@Html.EditorForModel()

<p>
<input type="submit" value="Create" />
</p>

</fieldset> *@
}

<div>
@Html.ActionLink("Back to List", "Index")
</div>

显示:

@model MvcApplication3.Models.Sample

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

<h2>Display</h2>

<fieldset>
<legend>Sample</legend>

<div class="display-label">Title</div>
<div class="display-field">@Model.Title</div>

<div class="display-label">Email</div>
<div class="display-field">@Model.Email</div>

<div class="display-label">Age</div>
<div class="display-field">@Model.Age</div>

<div class="display-label">CardNumber</div>
<div class="display-field">@Model.CardNumber</div>
</fieldset>
<p>
@Html.ActionLink("Back to List", "Index")
</p>

索引:

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

<h2>Index</h2>

<p>
@Html.ActionLink("Create", "Create")
</p>

<p>
@Html.ActionLink("Display", "Display")
</p>

这里一切都是默认的 - 创建 Controller 从 Controller 操作添加 View ,使用正确的脚手架模板指定模型并使用示例应用程序中提供的布局。

当我进入/Test/Create时,大多数情况下客户端验证仅适用于TitleAge字段,点击后>创建它适用于所有字段(创建不会转到服务器)。

但是在某些情况下(构建后)Title 验证不起作用,而 Email 有效,或者 CardNumberTitleCardNumberEmail 不是。但在单击创建之前,所有验证都不会起作用。

我尝试使用 Html.EditorForModel 创建表单,并在 BeginForm 之前强制执行客户端验证:

@{ Html.EnableClientValidation(); }

我是providing a source code for this sample on dropbox – 也许我们的开发环境已损坏:/我已经在 IE 8 和 Chrome 10 beta 上进行了测试。

以防万一,在 Web 配置中启用验证脚本:

<appSettings>
<add key="ClientValidationEnabled" value="true"/>
<add key="UnobtrusiveJavaScriptEnabled" value="true"/>
</appSettings>

所以我的问题是

有没有办法确保客户端验证能够正常工作而不是间歇性地工作?

这是一个理想的行为,但我在配置/实现中遗漏了一些东西吗?

更新:如果您在 JavaScript 中设置至少一个断点,验证就会开始工作,但如果没有它则不起作用

更新:添加 jquery 标签,因为这可能会连接到验证插件

最佳答案

当使用不显眼的验证时 - 实时客户端验证仅在首次提交后才起作用。在执行第一次客户端表单验证之前(只需单击提交),字段的实时验证未初始化且不起作用。

关于jquery - MVC 3 客户端验证间歇性地工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5105410/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com