我有一个Webform项目,我想将MVC 5添加到它,以便开发新的东西是MVC。 我喜欢在MVC中使用的一个功能是Unobtrusive客户端验证。但我似乎无法在这种情况下使其工作。验证在服务器端工作,但在客户端不起作用。通过检查标签,我注意到没有生成属性。我没有在浏览器控制台中显示任何javascript错误。 如果我在纯MVC5项目中执行此操作,它可以正常工作。 有谁知道如何才能使这项工作?我错过了什么吗?
我测试的方式是:
查看索引:
@model Merda.Areas.Branchen.Models.TestModel
@{
ViewBag.Title = "Index";
}
<h2>Index</h2>
<script src="~/Scripts/jquery-1.8.2.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>TestModel</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.prop1, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.prop1)
@Html.ValidationMessageFor(model => model.prop1)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.prop2, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.prop2)
@Html.ValidationMessageFor(model => model.prop2)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
控制器:
public class TestController : Controller
{
//
// GET: /Branchen/Test/
public ActionResult Index()
{
return View();
}
[HttpPost]
public ActionResult Index(TestModel model)
{
if (ModelState.IsValid)
{
ModelState.AddModelError(String.Empty, "Valid");
}
else {
ModelState.AddModelError(String.Empty, "Error...");
}
return View();
}
}
模型创建:
public class TestModel
{
[Required]
public string prop1 { get; set; }
[Required]
public string prop2 { get; set; }
}
创建View文件夹中的Web.config。
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
<section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=5.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="System.Web.Optimization" />
<add namespace="Merda" />
</namespaces>
</pages>
</system.web.webPages.razor>
<appSettings>
<add key="webpages:Enabled" value="false" />
<add key="ClientValidationEnabled" value="true" />
<add key="UnobtrusiveJavaScriptEnabled" value="true" />
</appSettings>
<system.webServer>
<handlers>
<remove name="BlockViewHandler"/>
<add name="BlockViewHandler" path="*" verb="*" preCondition="integratedMode" type="System.Web.HttpNotFoundHandler" />
</handlers>
</system.webServer>
</configuration>
更新: 我正在使用VS2012 Porfessional。
答案 0 :(得分:0)
您必须在主Web.config中编写该密钥,而不是在View文件夹中。但是,您也可以在每个控制器的基础上启用该验证,如ClientValidationEnabled and UnobtrusiveJavaScriptEnabled in MVC 4
中所示