c# - 模型属性未传递到下一个视图
问题描述
我正在尝试在 asp.net mvc 的不同视图中重用模型。但是如果模型被传递到下一个视图并提交了新属性,那么旧值就会丢失。
这是我正在使用的代码示例:
模型
public class ExampleModel
{
public string Attribut1 { get; set; }
public string Attribut2 { get; set; }
}
控制器
public class HomeController : Controller
{
public IActionResult Page1()
{
return View(new ExampleModel());
}
public IActionResult Page1Check(ExampleModel model)
{
return View("Page2", model);
}
public IActionResult Page2Check(ExampleModel model)
{
return View("Page2", model);
}
}
视图1
@model Example.Models.ExampleModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<form asp-controller="Home" asp-action="Page1Check">
<label asp-for="Attribut1"></label>
<input asp-for="Attribut1" placeholder="Attribut1" />
<button type="submit">Submit</button>
</form>
视图2
@model Example.Models.ExampleModel
@addTagHelper *, Microsoft.AspNetCore.Mvc.TagHelpers
<form asp-controller="Home" asp-action="Page2Check">
<label asp-for="Attribut2"></label>
<input asp-for="Attribut2" placeholder="Attribut2" />
<button type="submit">Submit</button>
</form>
如果我打开 Page1 会创建一个新模型。如果在Page1中输入了attribut1并提交了Page1Check,则调用并填充了attribut1。现在模型被传递到 page2。在这里,attribut2 被填写并提交。但是,如果我检查 Page2Check 内部的模型,则 attribut1 为空,并且仅填充了 attribut2。
奇怪的是,如果我检查 page2 视图中的属性 1,它仍然存在。只有在提交之后,attribut1 才消失。
我错过了什么,如何防止提交后填充的属性为空?
解决方案
为了在提交相应的表单时将一条数据从用户的浏览器发送到服务器,它必须包含在将发送到服务器的 HTML 元素中(例如 an<input>
或 a <select>
)。
在您的第一个视图中,您有一个 forAttribut1
但不是 for的输入Attribut2
,因此Attribut2
当提交视图 1 中的表单时,它不会成为发送到服务器的数据的一部分。Attribut1
在视图 2 中也是如此。
为了解决这个问题,您可以向<form>
标签包含的每个视图添加隐藏字段来存储数据:
- 对于视图 1,添加
<input type="hidden" asp-for="Attribut2" />
. - 对于视图 2,添加
<input type="hidden" asp-for="Attribut1" />
.
例如,视图 1 的表单现在如下所示:
<form asp-controller="Home" asp-action="Page1Check">
<label asp-for="Attribut1"></label>
<input asp-for="Attribut1" placeholder="Attribut1" />
<input type="hidden" asp-for="Attribut2" />
<button type="submit">Submit</button>
</form>
推荐阅读
- git - 如何阻止 github 修改我的文件(在工作流程中)?
- list - 我想查找列表列表中的列表是否有关键字。如果是,我想打印列表。我该怎么办?
- laravel - Laravel 应用程序与子域上的 laravel 应用程序
- php - 此路由不支持 GET 方法。支持的方法:POST。但是方法已经发布了
- svd - 从对称矩阵的特征分解计算奇异向量
- c++ - 在 MFC 执行 CFrameWnd::InitialUpdateFrame 期间访问冲突
- python - 使用 Pylint 检查我的代码并出现错误消息
- go - 是否可以使 GORM 中的 db.Preload() 自动预加载?
- azure - Azure 微服务性能洞察 - 集体性能计数器报告
- java - 是否可以在 android studio 中使用其他 JavaVersion?