未将模型属性传递给剃刀视图

问题描述:

我目前正在开发一个项目以模拟自行车存储。但是,我遇到了几个问题:未将模型属性传递给剃刀视图

1.)出于某种原因,Order.Create中的名称未传递给Order。为什么是这样? 2.)我希望Order.Create中的dropdownList通过JQuery从SelectList中的商店中删除任何Order。我将如何去做这件事?

代码如下。如果您有任何问题/文件要求/批评,请随时询问。

Order.Create:

<div class="form-group"> 
      @for(int i = 0; i < Model.Inventory.Count; i++) 
      { 
       <div class="col-md-10"> 
        @Html.HiddenFor(m => m.Inventory[i].Name) 
        @Html.HiddenFor(m => m.Inventory[i].Id) 
        @Html.HiddenFor(m => m.Inventory[i].Price) 
        @Html.CheckBoxFor(m => m.Inventory[i].IsSelected) 
        @Html.LabelFor(m => m.Inventory[i].IsSelected, Model.Inventory[i].Name) 
        @Html.DisplayFor(m => m.Inventory[i].Price) 
       </div> 
      } 
      <div class="col-md-10"> 
       @Html.LabelFor(m => m.Name) 
       @Html.TextBoxFor(m => m.Name) 
       @Html.LabelFor(m => m.PaymentMethod) 
       @Html.TextBoxFor(m => m.PaymentMethod) 
       @Html.LabelFor(model => model.StoreId, "StoreId", htmlAttributes: new { @class = "control-label col-md-2" }) 
       @Html.DropDownList("StoreId", null, htmlAttributes: new { @class = "form-control" }) 
       @Html.ValidationMessageFor(model => model.StoreId, "", new { @class = "text-danger" }) 
      </div> 
      </div> 

库存模型:

public class Inventory 
    { 
     public int Id { get; set; } 

     public string SerialNumber { get; set; } 

     public virtual Store Store { get; set; } 
     public int? StoreId { get; set; } 

     public string Model { get; set; } 

     public string Description { get; set; } 

     public Decimal InventoryCost { get; set; } 

     public Decimal RecSalePrice { get; set; } 

     public Decimal SalePrice { get; set; } 

     public string PaymentMethod { get; set; } 

     public virtual BikeCategory Category { get; set; } 
     public int? CategoryId { get; set; } 

存储模型:

public class Store 
    { 
     public int Id { get; set; } 

     public string Name { get; set; } 

     public string City { get; set; } 

     public string State { get; set; } 

     public int Zip { get; set; } 

     public string Address { get; set; } 

     public string Phone { get; set; } 

     public string Hours { get; set; } 

     public virtual List<Employee> Employees { get; set; } 

     public virtual List<Inventory> StoreInventory { get; set; } 

     public Store() 
     { 
      Name = ""; 
      Employees=new List<Employee>(); 
      StoreInventory = new List<Inventory>(); 
     } 

订货型号:

public class Order 
    { 
     public Order() 
     { 
      OrderedItems = new List<Inventory>(); 
     } 

     public string CustomerName { get; set; } //FROM CONTROLLER User.Identity.Name 

     public virtual List<Inventory> OrderedItems { get; set; } 
     //public virtual List<Account> Accounts { get; set; } 
     public DateTime? OrderDate { get; set; } 

     public DateTime? PickupDate { get; set; } 

     [Key, DatabaseGenerated(System.ComponentModel.DataAnnotations.Schema.DatabaseGeneratedOption.Identity)] 
     public int OrderNumber { get; set; } 

     public virtual Store StoreOrderedFrom { get; set; } 
     public int? StoreId { get; set; } 

     public Decimal TotalCost { get; set; } 

     public string PaymentMethod { get; set; } 

OrderVM型号:

public class OrderVM 


    { 
      public virtual Store Store { get; set; } 
      public int? StoreId { get; set; } 
      public string Name { get; set; } 
      public string PaymentMethod { get; set; } 
      public List<InventoryVM> Inventory { get; set; } 
     } 

InventoryVM型号:

public class InventoryVM 
    { 
     public decimal Price { get; set; } 
     public int Id { get; set; } 
     public string Name { get; set; } 
     public bool IsSelected { get; set; } 
     public virtual Store Store { get; set; } 
     public int? StoreId { get; set; } 
    } 

OrderedItemModel:

OrderController:

public class OrdersController : Controller 
    { 
     private BikeStoreContext db = new BikeStoreContext(); 

     // GET: Orders 

     public ActionResult Index() 
     { 
      return View(db.Orders.ToList()); 
     } 

     // GET: Orders/Details/5 
     public ActionResult Details(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      Order order = db.Orders.Find(id); 
      if (order == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(order); 
     } 

     // GET: Orders/Create 
     public ActionResult Create() 
     { 
      var inventory = db.StoreInventory; 
      OrderVM model = new OrderVM 
      { 
       Inventory = inventory.Select(i => new InventoryVM { Id = i.Id, Name = i.Model, Price=i.RecSalePrice}).ToList() 

      }; 
      ViewBag.StoreId= new SelectList(db.Stores, "Id", "Name"); 

      return View(model); 
     } 

     // POST: Orders/Create 
     // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
     // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Create([Bind(Include = "PaymentMethod, Inventory")]OrderVM model) 
     { 
      var Order = new Order 
      { 

       CustomerName = model.Name, 
       OrderDate = DateTime.Now, 
       PaymentMethod = model.PaymentMethod, 
       TotalCost=0, 
       PickupDate=DateTime.Now.AddDays(7), 
       StoreOrderedFrom=db.Stores.Find(model.StoreId), 
       StoreId=model.StoreId 


      }; 

      IEnumerable<int> selectedItems = model.Inventory.Where(i => i.IsSelected).Select(i => i.Id); 
      foreach(var item in selectedItems) 
      { 
       var orderItem = new OrderedItem { OrderId = Order.OrderNumber, InventoryId = item }; 
       db.OrderedItems.Add(orderItem); 
       Order.TotalCost = Order.TotalCost + model.Inventory.Find(i => i.Id == item).Price; 
       db.StoreInventory.Remove(db.StoreInventory.Find(item)); 
      } 
      db.Orders.Add(Order); 
      db.SaveChanges(); 
      model.Inventory.RemoveAll(i => i.IsSelected); 
      db.SaveChanges(); 
      ViewBag.StoreId = new SelectList(db.Stores, "Id", "Name", model.StoreId); 
      return View(model); 

     } 

     // GET: Orders/Edit/5 
     public ActionResult Edit(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      Order order = db.Orders.Find(id); 
      if (order == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(order); 
     } 

     // POST: Orders/Edit/5 
     // To protect from overposting attacks, please enable the specific properties you want to bind to, for 
     // more details see http://go.microsoft.com/fwlink/?LinkId=317598. 
     [HttpPost] 
     [ValidateAntiForgeryToken] 
     public ActionResult Edit([Bind(Include = "OrderNumber,CustomerName,OrderDate,PickupDate,TotalCost,PaymentMethod")] Order order) 
     { 
      if (ModelState.IsValid) 
      { 
       db.Entry(order).State = EntityState.Modified; 
       db.SaveChanges(); 
       return RedirectToAction("Index"); 
      } 
      return View(order); 
     } 

     // GET: Orders/Delete/5 
     public ActionResult Delete(int? id) 
     { 
      if (id == null) 
      { 
       return new HttpStatusCodeResult(HttpStatusCode.BadRequest); 
      } 
      Order order = db.Orders.Find(id); 
      if (order == null) 
      { 
       return HttpNotFound(); 
      } 
      return View(order); 
     } 

     // POST: Orders/Delete/5 
     [HttpPost, ActionName("Delete")] 
     [ValidateAntiForgeryToken] 
     public ActionResult DeleteConfirmed(int id) 
     { 
      Order order = db.Orders.Find(id); 
      db.Orders.Remove(order); 
      db.SaveChanges(); 
      return RedirectToAction("Index"); 
     } 

     protected override void Dispose(bool disposing) 
     { 
      if (disposing) 
      { 
       db.Dispose(); 
      } 
      base.Dispose(disposing); 
     } 
    } 
+1

2)当你说你想删除订单,你的意思是你想隐藏上面的库存div? – JamieD77

+0

@ JamieD77我想在那里有一个商店的下拉列表。选择商店将导致选择列表更改为仅显示该商店中的商品。 –

+0

'OrderVM'是一个视图模型。在使用视图模型时,您从不使用'[Bind]'属性 –

1)你没有名称在[Bind(Include = "PaymentMethod, Inventory")]所以它是被排除在外。

+0

它工作正常!谢谢! –