WebForm和MVC项目并行运行。不引人注目的验证不起作用

时间:2014-01-31 16:19:27

标签: asp.net asp.net-mvc validation webforms asp.net-mvc-5

我有一个Webform项目,我想将MVC 5添加到它,以便开发新的东西是MVC。 我喜欢在MVC中使用的一个功能是Unobtrusive客户端验证。但我似乎无法在这种情况下使其工作。验证在服务器端工作,但在客户端不起作用。通过检查标签,我注意到没有生成属性。我没有在浏览器控制台中显示任何javascript错误。 如果我在纯MVC5项目中执行此操作,它可以正常工作。 有谁知道如何才能使这项工作?我错过了什么吗?

我测试的方式是:

  1. 我创建了一个webform项目(使用框架4.5)。
  2. 我从NuGet MVC5添加到项目中。
  3. 创建区域。
  4. 添加AreaRegistration.RegisterAllAreas();到Global.asax,以便我可以使用区域。
  5. 从NuGet添加:
    • jQuery验证
    • Microsoft jQuery Unobtrusive Validation
  6. 在先前创建的区域中创建控制器并添加视图。
  7. 在View文件夹的web.config中,我添加到appSettings:
  8. 然后我创建一个模型并添加验证。
  9. 查看索引:

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

1 个答案:

答案 0 :(得分:0)

您必须在主Web.config中编写该密钥,而不是在View文件夹中。但是,您也可以在每个控制器的基础上启用该验证,如ClientValidationEnabled and UnobtrusiveJavaScriptEnabled in MVC 4

中所示