List 使用ASP.NET模型绑定的视图模型中的绑定列表
我正在开发一个应用程序来跟踪通过web应用程序发送的订单。该应用程序不会销售产品,它的设计目的是在订单通过电话进入时跟踪订单 我对ASP.NETMVC还是个新手,所以我还在学习诀窍。我正在尝试使用模型绑定来实现这一点 这是我的视图模型:List 使用ASP.NET模型绑定的视图模型中的绑定列表,list,asp.net-mvc-4,model-binding,List,Asp.net Mvc 4,Model Binding,我正在开发一个应用程序来跟踪通过web应用程序发送的订单。该应用程序不会销售产品,它的设计目的是在订单通过电话进入时跟踪订单 我对ASP.NETMVC还是个新手,所以我还在学习诀窍。我正在尝试使用模型绑定来实现这一点 这是我的视图模型: public class OrderDetailViewModel { public Order Order { get; set; } public List<OrderLine> OrderLinesLis
public class OrderDetailViewModel
{
public Order Order { get; set; }
public List<OrderLine> OrderLinesList { get; set; }
public OrderDetailViewModel()
{
this.Order = new Order();
List<OrderLine> OrderLines = new List<OrderLine>();
OrderLines = new List<OrderLine>();
OrderLines.Add(new OrderLine());
this.OrderLinesList = OrderLines;
}
public OrderDetailViewModel(Order order)
{
this.Order = order;
}
public string SalesRepName
{
get
{
ApplicationDbContext db = new ApplicationDbContext();
ApplicationUser Rep = db.Users.First(u => u.UserName == Order.SalesRep);
return Rep.FirstName + " " + Rep.LastName;
}
}
public IEnumerable<SelectListItem> CustomerList
{
get
{
var Db = new OrderContext();
var Customers = Db.Customers;
var AllCustomers = Customers.Select(c => new SelectListItem
{
Value = c.Id.ToString(),
Text = c.FirstName + " " + c.LastName
});
return AllCustomers;
}
}
public IEnumerable<SelectListItem> ProductList
{
get
{
var Db = new OrderContext();
var Products = Db.Products;
var AllProducts = Products.Select(p => new SelectListItem
{
Value = p.Id.ToString(),
Text = p.Name + ", " + p.Airshow + " - " + p.AirshowDate
});
return AllProducts;
}
}
}
是的,我知道控制器不处理列表。我使用了数据模型中的属性,然后我了解到需要在视图模型中将列表定义为属性。我正处于改变它的中间,但是当我在创建动作开始时遇到一个中断时,我注意到OrthReNeSLIST是NULL。
另外,我在旧版本的ASP.NET MVC中读到(至少我在参考更新版本的ASP.NET MVC时没有看到),您必须使用for循环而不是foreach循环。我试着走那条路,但仍然有空列表的问题
下面是我在Create视图中尝试作为for循环的代码。这是在当前显示的foreach循环的位置插入的:
@for (int i = 0; i < Model.OrderLines.Count(); i++)
{
<tr>
<td>
@Html.DropDownListFor(model => model.OrderLines[i].ProductId, Model.ProductList)
</td>
<td>
@Html.EditorFor(model => model.OrderLines[i].Quantity)
</td>
<td>
@Html.EditorFor(model => model.OrderLines[i].TaxRate)
</td>
<td>
@Html.HiddenFor(model => model.OrderLines[i].Id)
@Html.HiddenFor(model => model.OrderLines[i].Price)
@Html.HiddenFor(model => model.OrderLines[i].Discount)
@Html.HiddenFor(model => model.OrderLines[i].OrderId)
@Html.HiddenFor(model => model.OrderLines[i].Order)
@Html.HiddenFor(model => model.OrderLines[i].Product)
</td>
</tr>
}
for(int i=0;i如果有人能帮我修一下,我将不胜感激。你有没有弄明白这一点?我也遇到了同样的问题。
@model AirshowCouponsMvc.Models.OrderDetailViewModel
@{
ViewBag.Title = "Create";
}
<h2>Create</h2>
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
<div class="form-horizontal">
<h4>OrderDetailViewModel</h4>
<hr />
@Html.ValidationSummary(true, "", new { @class = "text-danger" })
<table class="table table-striped table-responsive table-hover">
<tr>
<th colspan="2">Order Date: @Html.Label(String.Format("{0:MMMM d, yyyy}", DateTime.Now))</th>
<th colspan="2">Customer: @Html.DropDownListFor(model => model.Order.CustomerId, Model.CustomerList)</th>
</tr>
<tr>
<th>
@Html.LabelFor(model => model.Order.OrderLines.FirstOrDefault().Product)
</th>
<th>
@Html.LabelFor(model => model.Order.OrderLines.FirstOrDefault().Quantity)
</th>
<th>
@Html.LabelFor(model => model.Order.OrderLines.FirstOrDefault().TaxRate)
</th>
<th>
@Html.HiddenFor(model => model.OrderLinesList)
</th>
</tr>
@foreach (AirshowCouponsMvc.Models.OrderLine item in Model.OrderLinesList)
{
<tr>
<td>
@Html.DropDownListFor(model => item.ProductId, Model.ProductList)
</td>
<td>
@Html.EditorFor(model => item.Quantity)
</td>
<td>
@Html.EditorFor(model => item.TaxRate)
</td>
<td>
@Html.HiddenFor(model => item.Price)
@Html.HiddenFor(model => item.OrderId)
@Html.HiddenFor(model => item.Id)
@Html.HiddenFor(model => item.Discount)
@Html.HiddenFor(model => item.Order)
@Html.HiddenFor(model => item.Product)
</td>
</tr>
}
<tr>
<td></td>
<td>@Html.ActionLink("Add line", "AddLine")</td>
<td>@if (Model.OrderLinesList.Count > 1) { @Html.ActionLink("Remove line", "RemoveLine") }</td>
</tr>
</table>
<div class="form-group">
<div class="col-md-offset-2 col-md-10 pull-right">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("Back to List", "Index")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(OrderDetailViewModel model)
{
if (ModelState.IsValid)
{
OrderContext db = new OrderContext();
model.Order.OrderDate = DateTime.Now;
model.Order.SalesRep = User.Identity.Name;
db.Orders.Add(model.Order);
foreach (var line in model.Order.OrderLines)
{
line.Price = line.Product.Price;
line.Discount = OrderDetailViewModel.DiscountRate(line.Quantity);
line.OrderId = model.Order.Id;
db.OrderLines.Add(line);
}
return RedirectToAction("Index");
}
return View(model);
}
@for (int i = 0; i < Model.OrderLines.Count(); i++)
{
<tr>
<td>
@Html.DropDownListFor(model => model.OrderLines[i].ProductId, Model.ProductList)
</td>
<td>
@Html.EditorFor(model => model.OrderLines[i].Quantity)
</td>
<td>
@Html.EditorFor(model => model.OrderLines[i].TaxRate)
</td>
<td>
@Html.HiddenFor(model => model.OrderLines[i].Id)
@Html.HiddenFor(model => model.OrderLines[i].Price)
@Html.HiddenFor(model => model.OrderLines[i].Discount)
@Html.HiddenFor(model => model.OrderLines[i].OrderId)
@Html.HiddenFor(model => model.OrderLines[i].Order)
@Html.HiddenFor(model => model.OrderLines[i].Product)
</td>
</tr>
}