1

如果这是一个菜鸟问题,请原谅我,但我已经在 SO、google 上进行了搜索,并花了一个多小时阅读 ASP.NET MVC 4 PRO 书籍,阅读有关 Rendering Stronly Typed Helpers 等。我刚刚开始学习 ASP.NET 4 MVC所以请对我放轻松。

我有一个名为的模型类USER和一个用覆盖的 getter 和 setter 调用的属性Name(我这样称呼它,我不确定这是否是正确的命名)

//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()
}

编辑:
LabelForDisplayForwindows 交换登录后,但仅在单击登录按钮后才会呈现。我第一次打开页面时它不会呈现

4

3 回答 3

2

如果要检索属性值,则应该使用DisplayFor not 。 LabelFor

@Html.DisplayFor(m => m.Name)
于 2013-05-24T10:50:41.753 回答
2

您没有将模型传递给初始视图:

return View();

应该

return View(newUser);
于 2013-05-24T11:45:40.117 回答
0
  1. 要在视图中获取当前经过身份验证的用户,您可以使用@User.Identity.Name。在控制器中,使用 User.Identity.Name

  2. 要在视图的 DisplayName 属性中显示“我想在此处调用 get 函数”,请使用 @Html.DisplayNameFor(m => model.Name)

  3. 在课堂上使用 WindowsIdentity 不是一个好主意。对于 MVC,最好使用 User.Identity.Name(在控制器中使用 this),原因是这种方式是获取当前 HttpRequest 下的用户名,使用 WindowsIdentity 可能没问题,但要小心。根据您使用它的方式,它可能会返回错误或返回运行应用程序池的服务帐户。

  4. 通常,getter 和 setter 是通过调用私有属性来编写的:

    公共类用户{

      private string _name;
    
      public string Name
    {
        get{
            return _name;
        }
        set{
            _name = WindowsIdentity.GetCurrent().Name.Split('\\')[1];
        }
    
    }
    
  5. 看起来您的 MVC 应用程序正在使用 Windows 身份验证,这是一个 Intranet 应用程序,因此您的用户将自动进行身份验证,这意味着已经登录。

于 2013-05-24T11:28:46.480 回答