我一直在努力争取一个小时,我不明白为什么会有问题。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