在MVC应用程序中设置变量

本文关键字:设置 变量 应用程序 MVC | 更新日期: 2023-09-27 18:15:25

我正在尝试了解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; }
}

在MVC应用程序中设置变量

在不知道源的情况下,看起来对As<type>()的调用相当于obj as type

。对象在本例中被转换为typeUserPart类型。因此,User被定义为IContent,但在这种情况下,假定实现该接口的类是UserPart类型的,并且可以安全地转换为该类型。

因此,User.As<UserPart>()返回一个类型为UserPart的对象,该对象可能具有属性Record

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

编辑:我说绑实现,因为大概User.As<UserPart>()可以返回null,如果底层类是不是类型的UserPart,并且没有检查。

在我看来,这个视图模型是用来编辑当前登录的用户详细信息的。

第一部分

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

User.As<UserPart>()——对我来说,这看起来像一个UserPart类型的c#对象,是由User类的静态方法调用创建的,该对象可能包含登录用户的详细信息。我怀疑它访问HttpContext.CurrentControllerContext的Request属性来知道谁是当前用户并获取他的详细信息。一旦它获取了代表当前登录用户的UserPart对象,.Record.UserName = value就简单地在该对象上设置传入值。

value是c#中所有set方法的隐式参数。

ViewModel的setter通常在Request的建模绑定期间,在actioninvoke之前绑定模型时调用。通常在渲染视图时调用getter。

如果您仍然觉得难以理解,请查看Orchid文档或源代码本身