在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; }
}
在不知道源的情况下,看起来对As<type>()
的调用相当于obj as type
。对象在本例中被转换为type
—UserPart
类型。因此,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.Current
或ControllerContext
的Request属性来知道谁是当前用户并获取他的详细信息。一旦它获取了代表当前登录用户的UserPart
对象,.Record.UserName = value
就简单地在该对象上设置传入值。
value
是c#中所有set方法的隐式参数。
ViewModel的setter通常在Request的建模绑定期间,在actioninvoke之前绑定模型时调用。通常在渲染视图时调用getter。
如果您仍然觉得难以理解,请查看Orchid文档或源代码本身