我有一个名为USER
的模型类和一个名为Name
的属性,带有覆盖的getter和setter(我用这种方式调用它,我不确定这是否是正确的命名)
//using...
namespace MvcMyApplication1.Models
{
public class User
{
[ScaffoldColumn(false)]
public int Id { get; set; }
public string Name
{
get
{
return WindowsIdentity.GetCurrent().Name.Split('\\')[1];
}
set
{
Name = WindowsIdentity.GetCurrent().Name.Split('\\')[1];
}
}
[Required(ErrorMessage="Password is required")]
public string Password { get; set; }
}
}
所以,在我的View
我试图显示get
函数的结果,但我迷路了,不知道该怎么做。
@using(Html.BeginForm())
{
@Html.ValidationSummary(excludePropertyErrors: true);
// changed from LabelFor to DisplayFor
@Html.DisplayFor(m => m.Name)<br />
@Html.PasswordFor(m => m.Password)<br />
<input type="submit" value="Log in" />
}
我尝试添加属性,但后来我不确定如何将Name=
分配给get
函数
[DisplayName(Name="I want to call the get function here")]
public string Name { get; set; }
在我的控制器中,我有这段代码:
[HttpGet]
public ActionResult Index()
{
User newUser = new User();
return View();
}
[HttpPost]
public ActionResult Index(User m)
{
if (ModelState.IsValid)
{
return View("Report", m);
}
{
return View(m);
}
}
这是Report
视图
通常会显示Windows login
@using (Html.BeginForm())
{
@Html.DisplayForModel()
}
编辑:将LabelFor
与DisplayFor
交换后,只会在点击登录按钮后呈现Windows登录信息。第一次打开页面时它不会呈现
答案 0 :(得分:2)
如果要检索属性值,则应该使用DisplayFor
而非 LabelFor
。
@Html.DisplayFor(m => m.Name)
答案 1 :(得分:2)
您没有将模型传递到初始视图:
return View();
应该是
return View(newUser);
答案 2 :(得分:0)
要在视图中获取当前经过身份验证的用户,可以使用@ User.Identity.Name。 在控制器中,使用User.Identity.Name
要在视图的DisplayName属性中显示“我想在此处调用get函数”,请使用@ Html.DisplayNameFor(m =&gt; model.Name)
在课堂上使用WindowsIdentity并不是一个好主意。对于MVC,最好使用User.Identity.Name(在控制器中使用此方法),原因是这种方式是在当前的HttpRequest下获取用户名,使用WindowsIdentity可能没问题,但要小心。根据您的使用方式,它可能会返回错误或返回运行应用程序池的服务帐户。
通常,getter和setter是通过调用私有属性来编写的:
公共类用户{
private string _name;
public string Name
{
get{
return _name;
}
set{
_name = WindowsIdentity.GetCurrent().Name.Split('\\')[1];
}
}
看起来您的MVC应用程序正在使用Windows身份验证,这是一个Intranet应用程序,因此您的用户将自动进行身份验证,这意味着已经登录。