所以我松散地关注音乐商店教程。我在pg上创建了StoreManagerController。 54ish。它创建了一个包含Create,Deleted,Edit等的视图。它将一些东西保存到数据库中,即我的EditFor控件,但没有别的。
我有多个DropDownListFor控件,由数据库中的两个表和Active Directory用户数据填充。我不确定如何保存这些。这是我的删节代码。谢谢你的帮助。
查看:
<div class="createTopInner">
<div class="editor-label">
@Html.LabelFor(model => model.test.Category)
</div>
<div class="editor-field">
@Html.DropDownListFor(model => model.CategoryId, Model.CategoryItems, "")
@Html.ValidationMessageFor(model => model.test.Category)
</div>
</div>
控制器:
public ActionResult Create()
{
// These four lines get active directory users
ActiveDirectoryModel ads = new ActiveDirectoryModel();
ViewBag.assignedto = ads.FetchContacts();
ViewBag.coassignedto = ads.FetchContacts();
ViewBag.notifyto = ads.FetchContacts();
var model = Populate();
return View(model);
}
[HttpPost]
public ActionResult Create(CreateViewModel model)
{
if (ModelState.IsValid)
{
db.TestItems.AddObject(model.test);
db.SaveChanges();
return RedirectToAction("Index");
}
return View(model);
}
public CreateViewModel Populate()
{
var model = new CreateViewModel
{
CategoryItems =
from c in new IntraEntities().CategoryItems.ToList()
select new SelectListItem
{
Text = c.Name,
Value = c.ID.ToString()
}
};
return model;
}
型号:
public class CreateViewModel
{
public Intra.Models.TestItem test{ get; set; }
public int CategoryId { get; set; }
public IEnumerable<SelectListItem> CategoryItems { get; set; }
}
答案 0 :(得分:0)
问题似乎是,虽然您的大部分输入都映射到test
上的属性,但CategoryId
却没有。对实体模型一无所知,很难说,但我猜测你需要从数据库中检索相应的Category
并将其添加到TestItem
实例中,然后才能保留它。如果你的CategoryId
实例上有TestItem
属性,你可以设置它,但我猜你没有,因为否则你会直接使用它(就像你做的那样) Category
标签)而不是向视图模型添加属性。
答案 1 :(得分:0)
如果您可以访问/了解存储过程,那么最好在数据库中使用Store过程,然后在Entity中调用它们。它可以更松散地耦合,更容易在不重新编译代码的情况下进行更改。