#c# #asp.net-core #razor-pages
Вопрос:
У меня форма на странице 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; }
}
Теперь, когда я задаю значение во вводе на моем частичном, и я пытаюсь отправить форму (с первого взгляда) в свой метод обновления в контроллере обратно :
Что я должен сделать, чтобы исправить обратные данные из частичной модели поля.Сколько это стоит?
Комментарии:
1. Привет @Новее,вы сказали,что используете страницы razor, но почему вы используете
asp-action
? Каков ваш внутренний код? Кроме того,что у тебя естьSubmitForm
? Попробуйте добавить имя к элементу ввода, например:name="CostEdit.WorkingHoursCost"
в вашем_FailureCostPartial.cshtml
.2. Когда я добавляю имя, оно начинает работать.
3. С удовольствием! 🙂
Ответ №1:
Для каждого свойства сложного типа привязка модели просматривает источники в поисках шаблона имени prefix.property_name
. Если ничего не найдено, он ищет только имя свойства без префикса.Для вашей модели получения это вложенная модель,поэтому вам нужен префикс, чтобы отличать свойство.
Попробуйте добавить имя к элементу ввода, например: name="CostEdit.WorkingHoursCost"
в вашем _FailureCostPartial.cshtml
.