我有一个拥有CRUD View的模型。当用户将数据插入数据库时,我想自动添加两条信息。添加信息和时间戳的用户。现在时间戳很简单,但我遇到了用户问题。
我考虑过在模型中访问当前登录用户,我还没有找到一种方法。或者也许(尚未尝试 - 只是考虑一下)在视图中使用用户的详细信息填充隐藏字段。
对我来说,拥有模型中的数据似乎比最终用户可以操作的视图更安全;我认为模型不会发生这种情况。
无论如何 - 问题: 1)我是否应该将模型中的AddedBy属性设置为模型内或视图内的用户名?
2)如果应该在模型中完成......我如何访问用户的数据?
感谢。
答案 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”语句中引用要包含在数据库中的字段值。