Обработка отправки формы MVC в базу данных - PullRequest
1 голос
/ 20 декабря 2011

Так что я свободно следую учебнику Music Store. Я создал StoreManagerController на pg. 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; }
}

Ответы [ 2 ]

0 голосов
/ 08 августа 2012

Если у вас есть доступ к нему / вы много знаете о хранимых процедурах, гораздо лучше использовать процедуры Store в базе данных, а затем вызывать их в Entity. Это намного слабее и проще вносить изменения без перекомпиляции кода.

0 голосов
/ 20 декабря 2011

Кажется, проблема в том, что, хотя большинство ваших входных данных отображаются на свойства test, CategoryId - нет. Трудно сказать, ничего не зная о ваших моделях сущностей, но я рискну предположить, что вам нужно извлечь соответствующий Category из базы данных и добавить его в ваш TestItem экземпляр, прежде чем вы сохраните его. Если у вас есть свойство CategoryId в вашем экземпляре TestItem, вы можете просто установить его, но я предполагаю, что у вас его нет, потому что в противном случае вы бы использовали его напрямую (как вы делаете для метки Category). ) вместо добавления свойства в модель представления.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...