部分视图中的数据未发布

时间:2019-06-24 08:24:51

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

我有以下页面:

<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仍然为空。 我认为这样会充满。 我想念什么?

1 个答案:

答案 0 :(得分:1)

回发表单时,元素的名称将映射到模型中的属性。看来名称不正确。您需要像下面这样指定TextBox名称,以便将其发布到属性中:

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

由于模型AlertPageModel是主Model类中Details属性的属性,因此我们需要正确指定名称,以便将其映射到适当的Model对象,并且Model Binder可以找出值需要映射到Model对象中的哪个特定属性上。

或者,您可以使用EditorFor并定义一个编辑器模板,而不是部分编辑器模板,该模板负责为专有名称加上前缀,以便在表单发布中正确地绑定该名称。您可以在以下文章中了解有关此内容的更多信息:

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

希望有道理。