【发布时间】:2012-03-13 14:35:46
【问题描述】:
我无法让我的创建功能正常工作。我正在尝试创建一个 Order 对象,其中包含一个 SalesPerson 和 Customer 对象。我的订单模型看起来像
public class Order
{
public int ID { get; set; }
public SalesPerson SalesPerson { get; set; }
public bool PreviousWork { get; set; }
public OrderStatus Status { get; set; }
public Customer Customer { get; set; }
public List<OrderLineItem> LineItems { get; set; }
}
然后我创建了一个视图模型:
public class OrderViewModel
{
private sunburstdb db = new sunburstdb();
public Order originalOrder { get; set; }
public IList<SelectListItem> SalesPeopleList { get; set; }
public IList<SelectListItem> CustomersList { get; set; }
public IList<SelectListItem> OrderStatusList { get; set; }
public OrderViewModel(Order order)
{
originalOrder = order;
}
}
在我的控制器中,我有以下内容:
//
// GET: /Order/Create
public ActionResult Create()
{
Order order = new Order();
OrderViewModel viewModel = new OrderViewModel(order);
//IList<SelectListItem> result = new List<SelectListItem>();
viewModel.SalesPeopleList = new List<SelectListItem>();
foreach (SalesPerson person in db.SalesPeople)
{
var temp = new SelectListItem();
temp.Text = person.FullName;
temp.Value = person.ID.ToString();
viewModel.SalesPeopleList.Add(temp);
}
//viewModel.SalesPeopleList = new SelectList(result);
//result.Clear();
viewModel.CustomersList = new List<SelectListItem>();
foreach (Customer person in db.Customers)
{
var temp = new SelectListItem();
temp.Text = person.FullName;
temp.Value = person.ID.ToString();
viewModel.CustomersList.Add(temp);
}
//viewModel.CustomersList = new SelectList(result);
return View(viewModel);
}
//
// POST: /Order/Create
[HttpPost]
public ActionResult Create(Order order)
{
if (ModelState.IsValid)
{
db.Orders.Add(order);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(order);
}
最后,我的观点非常标准,有几个字段可以按顺序填充数据。
@using (Html.BeginForm()) {
@Html.ValidationSummary(true)
<fieldset>
<legend>Order</legend>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.SalesPerson)
</div>
<div class="editor-field">
@Html.DropDownList("Order.SalesPerson", Model.SalesPeopleList)
</div>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.Customer)
</div>
<div class="editor-field">
@Html.DropDownList("Order.Customer", Model.CustomersList);
</div>
<div class="editor-label">
@Html.LabelFor(model => model.originalOrder.PreviousWork)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.originalOrder.PreviousWork)
@Html.ValidationMessageFor(model => model.originalOrder.PreviousWork)
</div>
<p>
<input type="submit" value="Create" />
</p>
</fieldset>
}
当我运行它并尝试创建一个新订单时,我得到以下信息:传递到字典中的模型项是“Models.Order”类型,但该字典需要一个“Models.OrderViewModel”类型的模型项。我想也许我需要将 create 方法中的参数更改为 public ActionResult Create(OrderViewModel order) 但是当我这样做时,错误是:没有为此对象定义无参数构造函数。有人可以向 MVC Noob 提供一些关于我做错了什么的帮助吗?
【问题讨论】:
-
您的视图顶部没有@model 行吗?如果是这样,请编辑添加。
-
是的,有一个@model,我没有包含整个视图文件。
-
我想出了如何通过将 Order 对象中的所有自定义对象更改为保存引用对象 ID 的 int 值来使其工作。然后在 OrderViewModel 中填充由 OrderController 中的 ID 引用的实际对象。
标签: asp.net-mvc asp.net-mvc-3 model-view-controller