У меня есть модель с парой полей и списком объектов. Список объектов возвращает null. Любая помощь будет оценена по достоинству, так как я не вижу, что здесь происходит!
Мои классы моделей:
public class TradeDiscount
{
public int TradeCustomerId { get; set; }
public decimal Discount { get; set; }
public string CategoryName { get; set; }
public string CategoryGroupIdentifier { get; set; }
}
public class TradeCustomerDetails
{
public List<TradeDiscount> discounts { get; set; }
public string CustomerName { get; set; }
public int CustomerId { get; set; }
}
Мой контроллер выглядит так:
public ActionResult Details(int id)
{
TradeCustomerDetails tradeCustomerDetails = repo.GetCustomerDiscountDetails(id);
return View(tradeCustomerDetails);
}
[HttpPost]
public ActionResult Details(TradeCustomerDetails tradeCustomerDetails)
{
repo.SaveCustomerDiscoutDetails(tradeCustomerDetails);
return View(tradeCustomerDetails);
}
Наконец, моя точка зрения такова:
@model Trade_Counter.Models.TradeCustomerDetails
@{
ViewBag.Title = "Discount Details";
}
<h2>Details</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>Discount Details</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<div class="form-group">
@Html.LabelFor(model => model.CustomerName, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CustomerName, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.CustomerId, htmlAttributes: new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.CustomerId, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
<div class="container-fluid form-horizontal">
<h4>Details for @Model.CustomerName </h4>
@Html.HiddenFor(model => model.CustomerId)
@foreach (var deets in Model.discounts) {
<div class="row form-group">
<div class="col-md-6">
@Html.DisplayFor(modelItem => deets.CategoryName, new { htmlAttributes = new { @class = "form-control" } })
</div>
@Html.HiddenFor(modelItem => deets.TradeCustomerId)
@Html.HiddenFor(modelItem => deets.CategoryGroupIdentifier)
<div class="col-md-6">
@Html.EditorFor(modelItem => deets.Discount, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
}
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Save" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
2 значения верхнего уровня возвращаются нормально, но список пуст.
Заранее спасибо :-)
J
3 ответа
Мой дорогой друг, я пробовал следующие решения в подобных проблемах, с которыми я сталкивался раньше.
Сначала добавьте атрибут [Key] в public int TradeCustomerId { get; набор; } Другой способ — добавить информацию TradeCustomerId в представление, но скрыть ее.
Я надеюсь, это поможет вам.
Используйте индексацию, чтобы привязка MVC работала правильно для списка:
@for (int i = 0; i < Model.discounts.Count(); ++i)
{
<div class="row form-group">
<div class="col-md-6">
@Html.DisplayFor(m => m.discounts[i].CategoryName, new { htmlAttributes = new { @class = "form-control" } })
</div>
@Html.HiddenFor(m => m.discounts[i].TradeCustomerId)
@Html.HiddenFor(m => m.discounts[i].CategoryGroupIdentifier)
<div class="col-md-6">
@Html.EditorFor(m => m.discounts[i].Discount, new { htmlAttributes = new { @class = "form-control" } })
</div>
</div>
}
В вашем классе TradeCustomerDetails
вам нужно создать новый экземпляр List<TradeDiscount>
:
public class TradeCustomerDetails
{
public List<TradeDiscount> discounts = new List<TradeDiscount>();
public string CustomerName { get; set; }
public int CustomerId { get; set; }
}
Похожие вопросы
Новые вопросы
c#
C# (произносится как «see Sharp») — это высокоуровневый мультипарадигменный язык программирования со статической типизацией, разработанный Microsoft. Код C# обычно нацелен на семейство инструментов и сред выполнения Microsoft .NET, которое включает в себя .NET, .NET Framework, .NET MAUI и Xamarin среди прочих. Используйте этот тег для ответов на вопросы о коде, написанном на C#, или о формальной спецификации C#.