MVC数据注释 - 必填字段不起作用

时间:2009-09-12 22:09:59

标签: asp.net-mvc linq data-annotations

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

[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到SQl),拼写看起来还不错。

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

由于

戴维

2 个答案:

答案 0 :(得分:1)

[MetadataType(typeof(SiteConstructionMetadata))]在我的部分课程之上,我理所当然地把它放在那里。

下次,我想我会发布所有内容,而不是发布片段,但很快就发现了这一点。

戴维

答案 1 :(得分:0)

确保您将DataAnnotationsModelBinder设为默认模型装订器。在Global.asax.cs

中添加以下内容
ModelBinders.Binders.DefaultBinder = new Microsoft.Web.Mvc.DataAnnotations.DataAnnotationsModelBinder();

并确保您在项目中引用了System.ComponentModel.DataAnnotations.dll程序集。有关详细信息,请参阅this tutorial