在部分提交给控制器的表单上不从部分返回值

On submit form with partial to controller not back value from partial

我在 Razor 页面中的表单如下所示(我删除了不需要的数据):

<form class="form-group form-popup" 
    asp-action="Update"
    data-ajax="true"
    data-ajax-method="POST">
    @Html.AntiForgeryToken()     
    <div class="popup-section">                                         
        <partial name="_FailureCostPartial" model="@Model.CostEdit" />
    </div>
    
    <div class="text-center mt-5 popup-edit-buttons">
        <button class="btn form-success" type="button" onclick="SubmitForm('@popupId')">
            @Localizer.GetLocalizedString("button_Save")<i class="fas fa-check fa-fw"></i>
        </button>
        <button class="btn form-danger" type="button" data-dismiss="modal">
            @Localizer.GetLocalizedString("button_Cancel")<i class="fas fa-times fa-fw"></i>
        </button>
    </div>
</form>

放入此视图的模型如下所示:

public class FailureEditViewModel
{
    public FailureForEditDto Failure { get; set; }
    public FailureCostEditViewModel CostEdit { get; set; }
    public List<SelectListItem> Suppliers { get; set; }
}

和_FailureCostPartial 看起来像这样:

<div class="details-form-field">
    <label class="col-sm-5">@Localizer.GetLocalizedString(nameof(Model.WorkingHoursCost))</label>
    <div class="input-container col-sm-7">
        <input id="Failure_WorkingHoursCost" asp-for="WorkingHoursCost" value="@Model.WorkingHoursCost" />
        <span asp-validation-for="WorkingHoursCost" class="text-danger"></span>
    </div>
</div>
<div class="details-form-field">
    <label class="col-sm-5">@Localizer.GetLocalizedString(nameof(Model.GeneralCost))</label>
    <div class="input-container col-sm-7">
        <input id="Failure_GeneralCost" asp-for="GeneralCost" value="@Model.GeneralCost" />
        <span asp-validation-for="GeneralCost" class="text-danger"></span>
    </div>
</div>
<div class="details-form-field">
    <label class="col-sm-5">@Localizer.GetLocalizedString(nameof(Model.TravelCost))</label>
    <div class="input-container col-sm-7">
        <input id="Failure_TravelCost" asp-for="TravelCost" value="@Model.TravelCost" />
        <span asp-validation-for="TravelCost" class="text-danger"></span>
    </div>
</div>
<div class="details-form-field">
    <label class="col-sm-5">@Localizer.GetLocalizedString(nameof(Model.TotalFailureCost))</label>
    <div class="input-container col-sm-7">
        <input disabled="disabled" id="Failure_TotalFailureCostField" asp-for="TotalFailureCost" value="@Model.TotalFailureCost" />
        <span asp-validation-for="TotalFailureCost" class="text-danger"></span>
    </div>
</div>

该部分的模型是:

public class FailureCostEditViewModel
{
    public decimal WorkingHoursCost { get; set; }
    public decimal GeneralCost { get; set; }
    public decimal TravelCost { get; set; }
    public decimal TotalFailureCost { get; set; }
}

现在,当我在我的部分输入中设置值时,我尝试将表单(从第一个视图)提交到控制器中的更新方法:

我应该如何更正字段 model.CostEdit 的部分返回数据?

对于复杂类型的每个 属性,模型绑定会在源中查找名称模式 prefix.property_name。如果没有找到,它只查找 property_name 而没有 prefix.For 你的接收模型是一个嵌套模型,所以你需要前缀来区分 属性.

尝试将名称添加到输入元素,例如:name="CostEdit.WorkingHoursCost" 在您的 _FailureCostPartial.cshtml.