C# 模型属性未传递到下一个视图

C# 模型属性未传递到下一个视图,c#,asp.net,model-view-controller,C#,Asp.net,Model View Controller,我正在尝试在asp.net mvc的不同视图中重用模型。但是,如果将模型传递到下一个视图并提交新属性,则旧值将丢失 下面是我正在使用的代码示例: 模型 控制器 public class HomeController : Controller { public IActionResult Page1() { return View(new ExampleModel()); } public I

我正在尝试在asp.net mvc的不同视图中重用模型。但是,如果将模型传递到下一个视图并提交新属性,则旧值将丢失

下面是我正在使用的代码示例:

模型

控制器

    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
提交
视图2

@model-Example.Models.ExampleModel
@addTagHelper*,Microsoft.AspNetCore.Mvc.TagHelpers
提交
如果打开第1页,将创建一个新模型。如果在第1页中输入了Attribute1并提交了Page1,则会调用Check并填写Attribute1。现在模型被传递到第2页。此处填写并提交属性2。但是,如果我检查Page2Check内部的模型,则Attribute1为空,并且只填充Attribute2

奇怪的是,如果我在page2视图中检查Attribute1,它仍然存在。只有在提交后,Attribute1才会消失


我是否遗漏了一些内容,如何防止提交后填写的属性为空?

为了在提交相应表单时从用户浏览器向服务器发送一段数据,它必须包含在将发送到服务器的HTML元素中(例如

在第一个视图中,您有
attribute1
的输入,但没有
attribute2
的输入,因此提交视图1中的表单时,
attribute2
不会成为发送到服务器的数据的一部分。视图2中的
attribute1
也是如此

要解决此问题,您可以向
标记包含的每个视图添加隐藏字段,以存储数据:

  • 对于视图1,添加
  • 对于视图2,添加
例如,视图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>

提交

为了在提交相应表单时将数据从用户浏览器发送到服务器,它必须包含在将发送到服务器的HTML元素中(例如

在第一个视图中,您有
attribute1
的输入,但没有
attribute2
的输入,因此提交视图1中的表单时,
attribute2
不会成为发送到服务器的数据的一部分。视图2中的
attribute1
也是如此

要解决此问题,您可以向
标记包含的每个视图添加隐藏字段,以存储数据:

  • 对于视图1,添加
  • 对于视图2,添加
例如,视图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>

提交
@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>
<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>