![](/img/trans.png)
[英]C# :How can i set Memory stream as the asp.net image control's source property?
[英]C#/ASP.NET MVC: I set the property's value, but it's still null
我已經為此奮斗了一個小時,但我不明白為什么會有問題。
我有一個抽象課
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對象傳遞給驗證,以檢查電子郵件是否唯一以及類似的東西。
這是初始化數據庫的方式:
protected override void Initialize(System.Web.Routing.RequestContext requestContext)
{
base.Initialize(requestContext);
DB = new MyDataContext();
}
DB屬性是在Register方法中設置的,我對此進行了調試。 但是在類的IsValid方法中它為null ...
更新
看起來由於某種原因,MVC框架在Register ActionResult之前(並且在初始化DB對象之前)運行IsValid方法。 我認為這是因為它通過將RegisterModel參數傳遞給視圖來完成所有“魔術”工作。 所以我就放
if (DB != null)
它有所幫助。
顯然,當我調用IsValid方法時,它將再次運行,並且此時DB對象不為null。
更新2
由於IsValid是屬性,因此ASP.NET MVC對其進行了綁定,將其轉換為方法后,問題就消失了。
您可能需要將IValidated
重命名為ValidationBase
或其他名稱I
前綴表示接口而不是基類。
是否在控制器的構造函數中設置了DB
? 我猜不是,這導致Register
方法為model.DB
分配了空引用,這導致您的NullReferenceException
。
同樣, MVC2將在數據綁定期間讀取屬性以嘗試驗證它們 。 那可能就是在咬你。 如果將IsValid
從屬性更改為方法,問題將消失。
您在哪里創建實例變量數據庫?
model.DB = DB
正確的數據庫在哪里初始化?
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.