validation - Model.IsValid 总是返回 true

标签 validation asp.net-mvc-3 ninject-2

好的,我几乎无能为力了。我有一个带有 View 模型的简单 MVC3 应用程序

View 模型

    public class TicketViewModel {
    public Ticket Ticket { get; set; }

    [DisplayName("Name")]
    [Required(ErrorMessage = "Requestor's name is required.")]
    public string Name { get; set; } }

Controller

    [HttpPost]
    public ActionResult Create(TicketViewModel vm)
    {
        if(ModelState.IsValid) {

            TempData["message"] = "Your ticket has been submitted.";
            TempData["message-class"] = "success";

            return RedirectToAction("Index");
        }

        TempData["message-class"] = "error";

        return View("Index", vm);
    }

出于某种原因,ModelState.IsValid 始终显示为 true。即使名称留空。就像模型/ View 模型根本没有验证一样。这适用于其他应用程序,所以我很确定我没有连接任何东西。我也包含了所有验证 javascript,但我认为这不是现在的问题。

更新 有趣的是,@Html.TextBoxFor() 生成的 html 标签不包括 data-val 和 data-val-required 属性。

查看

@model MyApp.ViewModels.TicketViewModel

@{
    ViewBag.Title = "Tickets";
}

<div id="main-content">
    <section class="large">
      <div class="section">
        <div class="section-header">Submit Ticket</div>
        <div class="section-content">
          <div class="message"></div>

          @using( Html.BeginForm("Create", "Home", FormMethod.Post) ) {
            <h2>User Information</h2>
            <dl>
              <dt>@Html.LabelFor( m => m.Name)</dt>
              <dd>
                @Html.TextBoxFor( m => m.Name)
                @Html.ValidationMessageFor( m => m.Name)
              </dd>

              <dt></dt>
              <dd><button>Submit</button></dd>
            </dl>
          }
        </div>
      </div>
    </section>
</div>

更新二

现在这很有趣。我创建了一个新的应用程序并使用基本代码进行了操作。然后,当我将 DI 代码添加到 global.asax.cs 时,验证停止工作。具体来说,当我添加

    public void SetupDependencyInjection() {
        _kernel = new StandardKernel();
        RegisterServices(_kernel);
        DependencyResolver.SetResolver(new NinjectDependencyResolver(_kernel));
    }

并从 Application_Start() 调用它

    protected void Application_Start()
    {
        SetupDependencyInjection();

        AreaRegistration.RegisterAllAreas();

        RegisterGlobalFilters(GlobalFilters.Filters);
        RegisterRoutes(RouteTable.Routes);
    }

如果我删除 SetupDependencyInjection() 验证开始工作。需要明确的是,DI 工作得很好,但它似乎会扼杀验证。这在 MVC3 工具更新之前运行良好。

最佳答案

我找到了解决方案。似乎当您通过 nuget 安装 Ninject 时配置有点不同。它从 App_Start 文件夹配置您的应用程序。基本上我在从 global.asax 调用我的 Ninject-Fu 时加倍了。这最终导致了奇怪的验证问题,尽管应用程序的其他部分正在运行。

Ninject - Setting up an MVC3 application

关于validation - Model.IsValid 总是返回 true,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6063893/

相关文章:

javascript - 如何确保单选按钮已被选中

c# - 如何使用 Moq 创建 stub

c# - Ninject 将委托(delegate)传递给 WithConstructorArgument

c# - Ninject WCF 扩展时间服务示例如何工作?

.net - 为什么我不能用 Ninjects ConstructorArgument 注入(inject) null 值?

forms - Symfony 表单验证问题

php - CakePHP 2 - 验证密码字段

validation - Zend Framework Validate 字段是 1 到 5 之间的整数

asp.net-mvc-3 - 如何根据当前页面 (MVC3/Razor) 动态注入(inject)部分 View (或代码)?

asp.net-mvc - ASP.NET MVC - 从另一个项目引用主/布局页面?