嗨,我的应用程序中有以下鳕鱼,但只有两个字段,它不起作用。
[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),拼写看起来还不错。
我错过了一些简单的事 - 拜托,发疯了。
由于
戴维
答案 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。