C# 发布传递给视图的相同模型
我有一个简单的帐户更新表单,可以发布到Update()函数。带有当前用户帐户信息的模型将传递给包含此表单的视图,因此字段将自动填写 表格C# 发布传递给视图的相同模型,c#,asp.net-mvc,razor,C#,Asp.net Mvc,Razor,我有一个简单的帐户更新表单,可以发布到Update()函数。带有当前用户帐户信息的模型将传递给包含此表单的视图,因此字段将自动填写 表格 @model SomeController.AccountModel @using (Html.BeginForm("Update", "SomeController", FormMethod.Post)) { @Html.LabelFor(u => u.Username) @Html.TextBoxFor(u => u.Usern
@model SomeController.AccountModel
@using (Html.BeginForm("Update", "SomeController", FormMethod.Post)) {
@Html.LabelFor(u => u.Username)
@Html.TextBoxFor(u => u.Username)
...
每个属性都有备份,例如backupUsername
,因此我可以在数据库中搜索旧属性并从中更新
更新()
但是,当我提交表单时,传递了一个全新的模型,因为
newInfo.backupUsername
为空。如何将相同的模型传回?我通常创建隐藏字段:
@model SomeController.AccountModel
@using (Html.BeginForm("Update", "SomeController", FormMethod.Post)) {
@Html.HiddenFor(u => u.backupUsername)
@Html.LabelFor(u => u.Username)
@Html.TextBoxFor(u => u.Username)
这样,当页面加载时,您可以填充字段,但用户不会对其进行更改,因此会像在帖子中一样传递该字段。我通常会创建隐藏字段:
@model SomeController.AccountModel
@using (Html.BeginForm("Update", "SomeController", FormMethod.Post)) {
@Html.HiddenFor(u => u.backupUsername)
@Html.LabelFor(u => u.Username)
@Html.TextBoxFor(u => u.Username)
这样,当页面加载时,您可以填充字段,但用户不会对其进行更改,因此它会像在帖子中一样传递。您可以使用隐藏字段向MVC显示您正在保留旧值,如下所示:
@Html.HiddenFor(x => x.Backupsomething)
您可以使用隐藏字段向MVC显示您正在保留旧值,如下所示:
@Html.HiddenFor(x => x.Backupsomething)
始终会创建一个新模型-由于HTTP是无状态的,因此在多个请求上没有视图模型的自动持久性(无需手动使用会话状态或其他机制)。POST操作中显示的模型是通过将表单中的字段绑定到该对象而创建的。如果字段不存在,则不会绑定任何内容
你有几个选择。第一个是将隐藏字段添加到视图中,以便模型绑定器将拾取它们:
@Html.HiddenFor(m => m.backupUsername)
但是请注意,这是不安全的,因为任何人都可以编辑HTML来操作此字段。如果需要安全性,则必须对其进行哈希/加密或再次从数据库中检索。始终会创建一个新模型-由于HTTP是无状态的,因此无法在多个请求上自动持久化视图模型(无需手动使用会话状态或其他机制)。POST操作中显示的模型是通过将表单中的字段绑定到该对象而创建的。如果字段不存在,则不会绑定任何内容
你有几个选择。第一个是将隐藏字段添加到视图中,以便模型绑定器将拾取它们:
@Html.HiddenFor(m => m.backupUsername)
但是请注意,这是不安全的,因为任何人都可以编辑HTML来操作此字段。如果需要安全性,则必须对其进行哈希/加密或再次从数据库中检索。在表单中添加隐藏字段。在表单中添加隐藏字段。感谢您的解释。如果我不想使用隐藏字段(以防用户查看源代码/检查元素并更改值,加密与否),还有什么我可以使用的吗?谢谢您的解释。如果我不想使用隐藏字段(如果用户查看源代码/检查元素并更改值,加密或不加密),那么还有什么我可以使用的吗?