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

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

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

由于

戴维

有帮助吗?

解决方案

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

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

戴维

其他提示

确保将 DataAnnotationsModelBinder 设为默认的模型绑定器。在 Global.asax.cs

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

并确保您在项目中引用了 System.ComponentModel.DataAnnotations.dll 程序集。有关更多详细信息,请参见本教程

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top