代码之家  ›  专栏  ›  技术社区  ›  Davy

MVC数据注释-必需字段不工作

  •  1
  • Davy  · 技术社区  · 15 年前

    嗨,我的应用程序中有以下代码,但只有两个字段不起作用。

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

    以下测试运行并通过:

        [TestMethod]
        public void SiteConstruction_MODEL_DevelopmentPM_Is_Required()
        {
            //arrange
            var propertyInfo = typeof(SiteConstructionMetadata).GetProperty    
                               ("DevelopmentPM");
    
            //act
            var attribute = propertyInfo.GetCustomAttributes(typeof(RequiredAttribute), 
                            true).Cast<RequiredAttribute>().FirstOrDefault();
    
            //assert
            Assert.IsNotNull(attribute);
        }
    

    我的控制器看起来像:

            TryUpdateModel(siteConstruction);
    
            if (!ModelState.IsValid)
               return View(siteConstruction);
    

    我在模型中还有其他必需的字段,它们都可以。此字段为空(我检查过),但不会使模型无效-因此没有验证,保存时出错。

    我的观点

        <li>
            <label for="DevelopmentPM">
                <strong>Development PM:</strong></label>
            <%= Html.TextBox("DevelopmentPM") %>
            <%= Html.ValidationMessage("DevelopmentPM", "*") %>
        </li>
    

    我看过我的.dbml(linq to sql),拼写还可以。

    我错过了一些简单的东西-拜托,发疯了。

    谢谢

    戴维

    2 回复  |  直到 15 年前
        1
  •  1
  •   Davy    15 年前

    [metadatatype(typeof(siteconstructionmetadata))]在我的分部类上面,我认为我在那里是理所当然的。

    下一次,我想我会把所有的东西都贴出来,而不是贴一些片段——斯莫内·沃伊斯很快就发现了这一点。

    戴维

        2
  •  0
  •   Tomas Aschan    15 年前

    确保您 DataAnnotationsModelBinder 默认的模型绑定器也是。在您的 Global.asax.cs :

    ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();
    

    并确保您引用了 System.ComponentModel.DataAnnotations.dll 在项目中组装。见 this tutorial 了解更多详细信息。