需要一個複雜類型的屬性我無法弄清楚如何「定製」的規則爲[Required]
屬性,當我堅持到自定義類型的屬性。代碼如下所示:請在MVC4形式
public class MyProp
{
public Guid Id {get;set;}
public string Target {get;set;}
}
public class MyType : IValidatableObject
{
public string Name {get;set;}
public MyProp Value {get;set;}
private MyType()
{
this.Name = string.Empty;
this.Value = new MyProp { Id = Guid.Empty, Target = string.Empty };
}
public MyType(Guid id) : this()
{
this.Value.Id = id;
// Fill rest of data through magic
}
public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
if(this.Value.Id == Guid.Empty)
yield return new ValidationResult("You must fill the property");
}
}
該模型在表單中顯示出來(通過自身EditorTemplate
)作爲一個按鈕,允許選擇從列表的文本框(後備數據是動態CRM 2011環境,而這模型實際上旨在表示查找屬性)。
public class MyModel
{
// Many props
[Required] // This one is enforced correctly
public string MyString {get;set;}
[Required] // This one isn't
public MyType MyData {get;set;}
public MyModel() { this.MyData = new MyType(); }
}
結果視圖顯示字段(當然是空的)。用戶只能通過點擊字段,然後從列表中選擇輸入數據(一個jQuery對話框照顧這一點,它已經工作)。
的IValidatableObject
接口聽起來很有前途,但該代碼似乎並沒有被永遠調用。
在控制器中,我只是在做
[HttpPost]
public ActionResult MyAction(FormCollection data)
{
if (!ModelState.IsValid) return View();
// magic: handle data
}
我缺少什麼?我可能誤解了IValidatableObject
接口的用法?
也許這可能會幫助你:http://stackoverflow.com/questions/3400542/how-do-i-use-ivalidatableobject – Silvermind
我忘了代碼的控制器部分,修正了問題。目前正試圖實現鏈接後的想法。 – Alex