Я работаю над проектом, где мне нужно создать корзину покупок с помощью проекта ASP.NET MVC.Как редактировать список, содержащийся в ViewModel ASP.NET
Я застреваю, пытаясь редактировать значения, которые я сохранил в свойстве настраиваемого ViewModel, который представляет собой список объектов.
модель выглядит следующим образом:
public class ShoppingCartVM
{
public List<ProductVM> CartItems { get; set; }
public decimal SubTotal { get; set; }
public decimal Tax { get; set; }
public decimal Total { get; set; }
public ShoppingCartVM() {}
public ShoppingCartVM(List<ProductVM> cartItems) {
this.CartItems = cartItems;
this.SubTotal = CalculateSubTotal();
this.Tax = CalculateTax();
this.Total = CalulateTotal();
// CalculateItemCost(); // will update the total cost field of VM
}
public decimal CalculateSubTotal()
{
decimal? total = 0.00m;
foreach(var item in this.CartItems)
{
total += item.totalCost;
}
return (decimal)total;
}
public decimal CalculateTax()
{
decimal tax = this.SubTotal * 0.07m;
return tax;
}
public decimal CalulateTotal()
{
decimal total = this.SubTotal + this.Tax;
return total;
}
}
И с точки зрения я в настоящее время пытается перебрать список и создать редактируемые поля для некоторых значений, как это:
<div class="form-horizontal">
<h4>ShoppingCartVM</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
@{
int i = 0;
// List<ShoppingCartApp.Models.ProductVM> CartItems = new List<ShoppingCartApp.Models.ProductVM>();
}
@foreach (var item in Model.CartItems)
{
// try to build up an array and add it to
<span> @item.productID </span>
@Html.Hidden("Model.CartItems[" + @i + " ].productID",@item.productID);
<span> @item.productName </span>
@Html.Hidden("Model.CartItems[" + @i + " ].productName", Model.CartItems[@i].productName);
@*<input type="number" value="@item.quantity" name="Model.CartItems[@i].quantity" />*@
@Html.EditorFor(model => model.CartItems[@i].quantity);
<span> @item.price </span>
@Html.HiddenFor(model => model.CartItems[@i].price);
<span> @item.totalCost </span>
@Html.HiddenFor(model => model.CartItems[@i].totalCost);
<br />
i++;
}
@Html.HiddenFor(model => model.CartItems); @*probably wont have updated values*@
<br />
@Html.Raw("<p> Sub total: " + Model.SubTotal + "</p>")
@Html.HiddenFor(model => model.SubTotal)
@Html.Raw("<p> Tax: " + Model.Tax + "</p>")
@Html.HiddenFor(model => model.Tax)
@Html.Raw("<p> Total: " + Model.Total + "</p>")
@Html.HiddenFor(model => model.Total)
<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>
}
Любые мысли по этому поводу? Я сохранил список на виртуальной машине, чтобы попытаться уменьшить «бизнес-логику» в представлении, но это, похоже, создает больше для меня.
Ваша помощь будет высоко оценена,
Спасибо,
Matt
Используйте 'for' цикл, а не' foreach' петли, или лучше использовать пользовательские 'EditorTemplate' для модели, представленной' CartItems' (и вы не показали нам модель). –
Да, вставлен в неправильный код. Виноват. –
Когда вы произносите редакторский шаблон, вы имеете в виду @ html.editorfor? Как я могу использовать это, находясь внутри цикла? –