我一直在努力爭取一個小時,我不明白爲什麼會有問題。C#/ ASP.NET MVC:我設置了屬性的值,但它仍然爲空
我有一個抽象類
public abstract class IValidated
{
public bool IsValid { get { return (GetRuleViolation() == null); } }
public abstract RuleViolation GetRuleViolation();
}
和一個驗證類
public class RegisterModel : IValidated
{
public string Name { get; set; }
public string Email { get; set; }
public string Password { get; set; }
public MyDataContext DB { get; set; }
// ....
}
當我使用驗證,我得到一個錯誤
public ActionResult Register(RegisterModel model)
{
model.DB = DB;
if (model.IsValid) // an exception here
}
DB爲空!我需要將datacontext對象傳遞給驗證,以檢查電子郵件是否是唯一的並且是這樣的。
這裏的DB如何初始化:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
DB = new MyDataContext();
}
的DB屬性在註冊方法設置,我調試這一點。但在它的空類的IsValid的方法...
UPDATE
看起來像某種原因MVC框架運行註冊的ActionResult前的IsValid方法(和DB對象初始化之前)。我認爲這是因爲它通過將RegisterModel參數傳遞給視圖來完成所有「魔術」功能。所以我只是把
if (DB != null)
它有幫助。
很明顯,IsValid方法在我調用它時再次運行,到那時DB對象不爲空。
UPDATE 2
由於是的IsValid一個屬性,ASP.NET MVC被結合它,把它變成一個方法後,該問題消失。
我認爲我們缺少部分圖片。我沒有看到示例代碼中的任何內容,表明爲什麼您期望DB不*爲空。另外,「RegisterModel」上的'GetRuleViolation()'實際上是做什麼的? – Toby 2010-08-16 14:36:49
爲什麼初始化方法而不是構造函數? – 48klocs 2010-08-16 14:40:32
@ 48klocs我無法訪問構造函數中的RouteData或ViewData。 – Alex 2010-08-16 14:54:35