C# 未将模型属性传递到Razor视图
我目前正在做一个项目来模拟一个自行车店。但是,我遇到了几个问题: 1.)由于某些原因,Order.Create中的名称未传递给Order。为什么会这样? 2.)我希望dropdownList按顺序排列。通过JQuery创建以删除SelectList中存储区以外的任何订单。我该怎么办 代码如下。如果您有任何问题/文件请求/批评,请随时提问 订单。创建:C# 未将模型属性传递到Razor视图,c#,jquery,asp.net,asp.net-mvc,visual-studio-2013,C#,Jquery,Asp.net,Asp.net Mvc,Visual Studio 2013,我目前正在做一个项目来模拟一个自行车店。但是,我遇到了几个问题: 1.)由于某些原因,Order.Create中的名称未传递给Order。为什么会这样? 2.)我希望dropdownList按顺序排列。通过JQuery创建以删除SelectList中存储区以外的任何订单。我该怎么办 代码如下。如果您有任何问题/文件请求/批评,请随时提问 订单。创建: <div class="form-group"> @for(int i = 0; i < Model.I
<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 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>();
}
OrderEditEmodel:
订单管理员:
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);
}
}
公共类OrdersController:控制器
{
private BikeStoreRecontext db=新的BikeStoreRecontext();
//获得:订单
公共行动结果索引()
{
返回视图(db.Orders.ToList());
}
//获取:订单/详细信息/5
公共行动结果详细信息(int?id)
{
if(id==null)
{
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Order Order=db.Orders.Find(id);
if(order==null)
{
返回HttpNotFound();
}
返回视图(订单);
}
//获取:订单/创建
公共操作结果创建()
{
var存货=db.StoreInventory;
OrderVM模型=新OrderVM
{
Inventory=Inventory.Select(i=>newinventoryvm{Id=i.Id,Name=i.Model,Price=i.RecSalePrice})
};
ViewBag.StoreId=新选择列表(db.Stores,“Id”,“Name”);
返回视图(模型);
}
//发布:订单/创建
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果创建([Bind(Include=“PaymentMethod,Inventory”)]OrderVM模型)
{
var订单=新订单
{
CustomerName=model.Name,
OrderDate=DateTime。现在,
PaymentMethod=model.PaymentMethod,
总成本=0,
PickupDate=DateTime.Now.AddDays(7),
StoreOrderedFrom=db.Stores.Find(model.StoreId),
StoreId=model.StoreId
};
IEnumerable selectedItems=model.Inventory.Where(i=>i.IsSelected).Select(i=>i.Id);
foreach(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)。价格;
db.StoreInventory.Remove(db.StoreInventory.Find(item));
}
db.Orders.Add(订单);
db.SaveChanges();
model.Inventory.RemoveAll(i=>i.IsSelected);
db.SaveChanges();
ViewBag.StoreId=新选择列表(db.Stores,“Id”,“Name”,model.StoreId);
返回视图(模型);
}
//获取:订单/编辑/5
公共行动结果编辑(int?id)
{
if(id==null)
{
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Order Order=db.Orders.Find(id);
if(order==null)
{
返回HttpNotFound();
}
返回视图(订单);
}
//发布:订单/编辑/5
//若要防止套印攻击,请启用要绑定到的特定属性,例如
//更多详细信息请参见http://go.microsoft.com/fwlink/?LinkId=317598.
[HttpPost]
[ValidateAntiForgeryToken]
公共操作结果编辑([Bind(Include=“OrderNumber,CustomerName,OrderDate,PickupDate,TotalCost,PaymentMethod”)]订单)
{
if(ModelState.IsValid)
{
db.Entry(order).State=EntityState.Modified;
db.SaveChanges();
返回操作(“索引”);
}
返回视图(订单);
}
//获取:订单/删除/5
公共操作结果删除(int?id)
{
if(id==null)
{
返回新的HttpStatusCodeResult(HttpStatusCode.BadRequest);
}
Order Order=db.Orders.Find(id);
if(order==null)
{
返回HttpNotFound();
}
返回视图(订单);
}
//发布:订单/删除/5
[HttpPost,ActionName(“删除”)]
[ValidateAntiForgeryToken]
公共行动结果删除已确认(内部id)
{
Order Order=db.Orders.Find(id);
db.Orders.Remove(命令);
db.SaveChanges();
返回操作(“索引”);
}
受保护的覆盖无效处置(布尔处置)
{
如果(处置)
{
db.Dispose();
}
基地。处置(处置);
}
}
1)你的[Bind(Include=“PaymentMethod,Inventory”)]
中没有名字,所以它被排除在外。2)当你说要删除订单时,你的意思是想隐藏上面的库存分区吗?@JamieD77我想有一个商店的下拉列表。选择存储将导致选择列表更改为仅显示该存储中的项目。OrderVM
是一种视图模型。使用视图模型时从不使用[Bind]
属性
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; }
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; }
}
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; }
}
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);
}
}