在MVC应用程序中设置变量?

时间:2011-11-20 17:30:18

标签: c# asp.net-mvc asp.net-mvc-3

我正在尝试了解Orchard MVC应用程序。我看到以下代码,但无法理解它在做什么。有人可以解释一下这个:

User.As<UserPart>().Record.UserName = value;

装置?

 public class UserEditViewModel  {
    [Required]
    public string UserName {
        get { return User.As<UserPart>().Record.UserName; }
        set { User.As<UserPart>().Record.UserName = value; }
    }

    [Required]
    public string Email {
        get { return User.As<UserPart>().Record.Email; }
        set { User.As<UserPart>().Record.Email = value; }
    }

    public IContent User { get; set; }
}

2 个答案:

答案 0 :(得分:0)

在我看来,这个viewmodel用于编辑当前登录的用户详细信息。

的第1部分

User.As<UserPart>().Record.UserName = value;

User.As<UserPart>() - 我认为类似于UserPart的C#对象是由User类上的静态方法调用创建的,并且该对象可能包含已登录的用户详细信息。我怀疑它访问HttpContext.CurrentControllerContext的Request属性,以了解当前用户是谁并获取其详细信息。获取表示当前登录用户UserPart的{​​{1}}对象后,只需在对象上设置传入值。

.Record.UserName = value是C#中所有set方法的隐式参数。

ViewModel的setter通常在actioninvoking之前的Request模型绑定期间绑定模型时调用。并且在渲染视图时通常会调用getter。

如果您仍然觉得难以理解,请查看Orchid DocumentationSource Code本身

答案 1 :(得分:0)

不知道来源,看起来As<type>()的来电相当于obj as type

即。在这种情况下,对象将被转换为类型type - UserPart。因此User被定义为IContent,但在这种情况下,假设实现该接口的类的类型为UserPart,并且可以安全地转换为该类型。

因此User.As<UserPart>()会返回UserPart类型的对象,该对象可能包含属性Record

对我来说这似乎很奇怪,因为如果你将实现绑定到类型IContent,为什么要抽象UserPart接口,但同样,我不知道代码,它可能很有意义在更大的背景下。

编辑:我说绑定实现,因为如果基础类类型为User.As<UserPart>(),大概UserPart可能会返回null,并且没有检查。< / p>