【问题标题】:Data from partial view not posting部分视图中的数据未发布
【发布时间】:2019-11-06 00:35:30
【问题描述】:

我有以下页面:

<form method="post">
<hr />
<h4>Alert</h4>
<div class="card-overview">
    <div class="card-columns">
        <partial name="_Alert" model="Model.Details.AlertPageModel" />
    </div>
</div>

我的局部视图如下:

@model AlertPageModel
<div class="card">
<div class="card-body">
    @Html.TextBox("AlertPageModel.AlertDate", Model.AlertDate)
    @Html.TextBox("AlertPageModel.Message", Model.Message)
</div>

这导致我的部分观点如下:

<input id="AlertPageModel_Message" name="AlertPageModel.Message" type="text" value="">
<input id="AlertPageModel_AlertDate" name="AlertPageModel.AlertDate" type="text" value="24/06/2019 10:23:12">

现在,当我发布页面时,我的 AlerPageModel 仍然为空。 我以为它会以这种方式填充。 我错过了什么?

【问题讨论】:

  • 让你的模型包含你的两个视图的属性,然后它会正确映射,你可以过滤你正在寻找的值。
  • @mahlatse:我不确定你的意思。你能解释一下吗?
  • 这个想法是,如果您将模型 A、B、C、D 作为视图中的部分模型,则它们各自的模型都会与父模型表单一起回发,因此您只需要包含属性作为主视图模型和过滤器服务器端的一部分。 (或者只是使用一个简单的 js 脚本来改变你的 formaction 和 post
  • @mahlatse:对不起,我还是不明白你的意思。能举个例子吗?

标签: c# partial-views razor-pages asp.net-mvc-partialview


【解决方案1】:

当表单回传时,元素的名称被映射到模型中的属性。名称似乎不正确。您需要指定 TextBox 名称,如下所示,以便将其发布在属性中:

@Html.TextBox("Details.AlertPageModel.AlertDate", Model.AlertDate)
@Html.TextBox("Details.AlertPageModel.AlertPageModel.Message", Model.Message)

由于您的模型AlertPageModel 是您的主模型类中Details 属性的一个属性,我们需要正确指定名称,以便它映射到正确的模型对象,模型绑定器可以确定这个值需要映射到 Model 对象中的哪个特定属性。

或者,您可以使用EditorFor 并定义一个编辑器模板而不是部分的,它负责为正确的名称添加前缀,以便正确绑定到表单帖子中。您可以在以下帖子中阅读更多相关信息:

https://www.codeproject.com/Articles/1079909/ASP-NET-MVC-Partial-Views-with-Partial-Models

希望它有意义。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2018-09-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-30
    相关资源
    最近更新 更多