renderinglabelfor不显示覆盖的getter函数
本文关键字:getter 函数 覆盖 显示 renderinglabelfor | 更新日期: 2023-09-27 18:15:05
如果这是一个新手问题,请原谅我,但我已经搜索了SO,谷歌,并花了一个多小时与ASP。. NET MVC 4 PRO关于渲染强类型助手等方面的书籍阅读。我刚刚开始学习ASP。NET 4 MVC,所以请对我宽容一点。
我有一个名为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()
}
EDIT:
将LabelFor
与DisplayFor
交换后,呈现windows登录,但只有在单击登录按钮之后。当我第一次打开页面
您没有将模型传递给初始视图:
return View();
应该return View(newUser);
如果你想检索属性值,你应该使用DisplayFor
而不是 LabelFor
。
@Html.DisplayFor(m => m.Name)
要获取视图中当前经过身份验证的用户,可以使用@User.Identity.Name。在控制器中,使用User.Identity.Name
要在视图的DisplayName属性中显示"I want To call the get function here",使用@Html。DisplayNameFor(m => model.Name)
在你的类中使用WindowsIdentity不是一个好主意。对于MVC,更好地使用user . identity . name(在控制器中使用这个),原因是这种方式是在当前HttpRequest下获取用户名,使用WindowsIdentity可能是好的,但要小心。根据您使用它的方式,它可能返回错误或返回运行应用程序池的服务帐户。
通常,getter和setter是这样通过调用私有属性来编写的:
公共类User{
private string _name; public string Name { get{ return _name; } set{ _name = WindowsIdentity.GetCurrent().Name.Split('''')[1]; } }
看起来你的MVC应用程序正在使用Windows认证,这是一个内部网应用程序,所以你的用户将被自动认证,这意味着已经登录。