Попытка отредактировать объект с данными из выпадающих в MVC - PullRequest
0 голосов
/ 23 февраля 2011

У меня проблемы с отправкой нескольких моделей для просмотра в mvc. Моя проблема заключается в следующем.

Используя EF4, у меня есть таблица с атрибутами, упорядоченная по категориям.

Не удалось опубликовать изображение :-( [Иметь таблицу с атрибутами (AttributeTitle, AttributeName, CategoryID), связанную с таблицей с именем Category (CategoryTitle).]

Что я хочу сделать, так это иметь возможность редактировать атрибутную сущность и иметь выпадающий список категорий для выбора.

Я пытался сделать пользовательскую модель просмотра

    public class AttributeViewModel
{
    public AttributeViewModel()
    {
    }

    public Attribute Attribute { get; set; }
    public IQueryable<Category> AllCategories { get; set; }
}

Но это просто закончилось беспорядком.

<div class="editor-field">
        <%: Html.DropDownList("Category", new SelectList((IEnumerable)Model.AllCategories, "CategoryID", "CategoryName")) %>
    </div>

Я возвращал его на контроллер ...

        [HttpPost]
    public ActionResult Edit(int AttributeID, FormCollection formcollection)
    {
        var _attribute = ProfileDB.GetAttribute(AttributeID);
        int _selcategory = Convert.ToInt32(formcollection["Category"]);
        _attribute.CategoryID = (int)_selcategory;

        try
        {
            UpdateModel(_attribute); (<---Error here)
            ProfileDB.SaveChanges();

            return RedirectToAction("Index");
        }
        catch (Exception e)
        {

            return View(_attribute);
        }
    }

Я отладил код, и мой _attribute выглядит правильно, а _attribute.CategoryID = (int) _selcategory обновляет модель, но затем я получаю ошибку.

Где-то здесь я думал, что должен быть более чистый способ сделать это, и что если бы я мог только отправить две модели в представление вместо того, чтобы создавать пользовательскую модель представления.

Подводя итог: Я хочу изменить свой атрибут и раскрыть список всех доступных категорий.

Любая помощь высоко ценится!

1 Ответ

0 голосов
/ 24 февраля 2011

Решил!

Если кому-то интересно, мое решение следующее. Я создал класс:

public class AttributeEditViewModel
{
    public AttributeEditViewModel()
    {
    }

    public AttributeEditViewModel(Attribute attribute, SelectList categories)
    {
        this.attribute = attribute;
        this.categories = categories;
    }

    public Attribute attribute { get; set; }
    public SelectList categories { get; set; }
}

Мой контроллер:

        // GET: /Attribute/Edit/5
    public ActionResult Edit(int AttributeID)
    {
        Attribute _attribute = ProfileDB.GetAttribute(AttributeID);

        var _viewmodel = new AttributeEditViewModel
        {
            attribute = _attribute,
            categories = new SelectList(ProfileDB.GetAllCategories(), "CategoryID", "CategoryName", _attribute.CategoryID)
        };

        return View(_viewmodel);
    }

Часть моего взгляда:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<KnowledgePortal.ViewModel.AttributeEditViewModel>" %>



<div class="editor-field">
     <%: Html.DropDownList("Category", Model.categories, Model.attribute.CategoryID) %>
</div>

<p>
     <input type="submit" value="Save" />
</p>

И постбэк:

// POST: /Attribute/Edit/5
[HttpPost]
public ActionResult Edit(int AttributeID, FormCollection formcollection)
{
    var _attribute = ProfileDB.GetAttribute(AttributeID);
    int _selcategory = Convert.ToInt32(formcollection["Category"]);
    _attribute.CategoryID = (int)_selcategory;

    try
    {
        ProfileDB.SaveChanges();

        return RedirectToAction("Index");
    }
    catch (Exception e)
    {

        return View(_attribute);
    }
}

В основном моя проблема была из-за моего непонимания, что сделала updatemodel. Поэтому после «_attribute.CategoryID = _selcategory» все, что мне нужно было сделать, это сохранить изменения, но сначала я попытался обновить модель, которая продолжала давать сбой.

Надеюсь, это поможет кому-то еще!

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