MVC访问从模型登录用户

时间:2014-06-07 10:31:57

标签: c# asp.net-mvc-3 view model

我有一个拥有CRUD View的模型。当用户将数据插入数据库时​​,我想自动添加两条信息。添加信息和时间戳的用户。现在时间戳很简单,但我遇到了用户问题。

我考虑过在模型中访问当前登录用户,我还没有找到一种方法。或者也许(尚未尝试 - 只是考虑一下)在视图中使用用户的详细信息填充隐藏字段。

对我来说,拥有模型中的数据似乎比最终用户可以操作的视图更安全;我认为模型不会发生这种情况。

无论如何 - 问题: 1)我是否应该将模型中的AddedBy属性设置为模型内或视图内的用户名?

2)如果应该在模型中完成......我如何访问用户的数据?

感谢。

1 个答案:

答案 0 :(得分:1)

默认项目设置会为您提供dbo.AspNetUsers来存储您的用户ID。或者,您可能有自定义的内容。

您的模型需要引用UserName ...以进行注册(如果允许)和登录。这是用户输入他们选择的任何登录(或者有人为他们分配登录)的地方。此时,用户应该能够更正任何拼写错误或更改名称。你可能选择不允许这样做。但是如果你想要显示用户名,它必须在某个地方可用。

要防止用户在输入数据时进行更改,您可以将字段设置为显示或隐藏。这样,您仍然会捕获userID但不给他们任何改变它的机会。

在您的视图中,您可以使用:@Html.DisplayName(User.Identity.Name) or User.Identity.GetUserName()来显示名称。

如果您不希望用户看到自己的名字???将字段设置为隐藏@Html.HiddenFor(User.Identity.Name)

对于创建视图:

@Html.TextBoxFor(model => model.UserName, new { Value = User.Identity.Name, @Type="Hidden"} )

以及日期/时间:

        @DateTime.Now.DayOfWeek
        @DateTime.Now.ToString("MM/dd/yyyy hh:mm tt")
        @Html.TextBoxFor(model => model.LogDate, new { Value = @DateTime.Now, @Type = "Hidden" })

确保在控制器的“bind”语句中引用要包含在数据库中的字段值。