【问题标题】:Handling MVC form submission to database处理 MVC 表单提交到数据库
【发布时间】:2012-01-24 11:05:15
【问题描述】:

所以我大致遵循音乐商店教程。我在 pg 上创建了 StoreManagerController。 54左右。它使用 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; }
}

【问题讨论】:

    标签: c# asp.net-mvc model-view-controller


    【解决方案1】:

    问题似乎在于,虽然您的大部分输入都映射到 test 上的属性,但 CategoryId 却没有。对您的实体模型一无所知,很难说,但我猜测您需要从数据库中检索相应的 Category 并将其添加到您的 TestItem 实例中,然后再将其持久化。如果你的 TestItem 实例上有 CategoryId 属性,你可以设置它,但我猜你没有,因为否则你会直接使用它(就像你对 Category 标签所做的那样) 而不是向视图模型添加属性。

    【讨论】:

      【解决方案2】:

      如果您可以访问它/对存储过程了解很多,最好在数据库中使用存储过程,然后在实体中调用它们。它更松散耦合,更容易在不重新编译代码的情况下进行更改。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-02-03
        • 2021-12-14
        • 1970-01-01
        • 1970-01-01
        • 2013-06-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多