我挣扎了解一些jQuery验证的有线了ASP.NET MVC的基础知识作为。
这个问题的短版是:什么魔法我缺少的,允许通过生成的代码@Html.EditorFor()
执行jQuery验证,但没有工作,我尝试使用完全相同的HTML要连接我自己的jQuery的验证?
作为一个学习锻炼(因为它模仿什么,我真的希望在我的网站做的),我创建在Visual Studio 2012年我加入一个视图模型一个新的MVC 4应用程序:
using System.ComponentModel.DataAnnotations;
namespace ValidationTest.Models
{
public class MyViewModel
{
[Required]
public string MyStringValue { get; set; }
}
}
我修改意见\首页\ Index.cshtml基于我这样的视图模型创建表单:
@model ValidationTest.Models.MyViewModel
@using (Html.BeginForm(new { id = "MyForm" })) {
@Html.LabelFor(m => m.MyStringValue)
@Html.EditorFor(m => m.MyStringValue)
@Html.ValidationMessageFor(m => m.MyStringValue)
<br />
<input type="submit" value="Submit" />
}
最后,我修改了主页控制器视图模型提供的形式和处理相关联的支柱,就像这样:
using System.Web;
using System.Web.Mvc;
using ValidationTest.Models;
namespace ValidationTest.Controllers
{
public class HomeController : Controller
{
[HttpGet]
public ActionResult Index()
{
var viewModel = new MyViewModel();
return View(viewModel);
}
[HttpPost]
public ActionResult Index(MyViewModel viewModel)
{
if (!ModelState.IsValid) return View(viewModel);
return RedirectToAction("About");
}
public ActionResult About()
{
ViewBag.Message = "Your app description page.";
return View();
}
public ActionResult Contact()
{
ViewBag.Message = "Your contact page.";
return View();
}
}
}
当我运行该项目,该网页显示一个文本框,并奇迹般地将验证用户必须输入一个值。 到现在为止还挺好...
现在,我的实际应用程序是一个在线调查。 它显示的问题和征求基于脚本的答案。 我的实际视图模型包含映射到问题的文本,由用户提供的值等视图模型还包含一个指定用户是否必须提供一个值的Boolean必填属性的属性(即是否要启用“要求”中查看验证) -所以这意味着我需要删除[Required]
基于视图模型Required属性上MyStringValue property属性在我的视图模型,并提供自己的验证魔法。
这是我迷路。 在IE中,我可以看到,在示例应用程序(如上所述)html.xxx调用@产生这个HTML为以下形式:
<label for="MyStringValue">MyStringValue</label>
<input class="text-box single-line"
data-val="true"
data-val-required="The MyStringValue field is required."
id="MyStringValue"
name="MyStringValue"
type="text"
value="" />
<span data-valmsg-for="MyStringValue" data-valmsg-replace="true"></span>
但我没有看到任何HTML其他地方明显引用jQuery的验证库的页面上,我也不看的JavaScript代码启用验证,所以我不明白为什么在所有工作。
此外,如果我删除[Required]
属性,以及硬编码的视图发出上述HTML(没有魔法@ html.xxx()调用),则没有验证发生在所有。
我在想什么?