Сохранение списков в модели от представления к контроллеру - PullRequest
1 голос
/ 08 мая 2011

Я довольно новичок в ASP.NET MVC, поэтому, пожалуйста, будьте терпеливы со мной. У меня возникают проблемы с сохранением списка в моей модели обратно на контроллер, когда пользователь отправляет форму.

Вот сценарий: Это веб-приложение, которое позволяет пользователям создавать оценки для заданий на перевод. Каждая оценка имеет список языковых пар. Чтобы дать пользователям возможность добавлять языковые пары, им необходим список всех доступных языковых пар.

Моя модель выглядит примерно так:

public class EstimateModel
{
    public tblEstimate Estimate { get; set; }
    public IEnumerable<tblEstimateLangPair> EstimateLanguagePairs { get; set; }
    public IEnumerable<tblLangPair> LanguagePairs { get; set; }

    public EstimateModel()
    {
        Estimate = new tblEstimate();
        EstimateLanguagePairs = new List<tblEstimateLangPair>();
        LanguagePairs = new List<tblLangPair>();
    }
}

Это в основном оболочка для объектов, которые были созданы Entity Framework. В моем контроллере я управляю объектом оценки и двумя списками языковых пар и передаю его в представление следующим образом:

public ActionResult Edit(int estimateID)
{
    EstimateModel model = new EstimateModel();

    model.Estimate = db.tblEstimates.Single(t => t.EstimateID == estimateID);

    model.LanguagePairs = db.tblLangPairs.ToList();

    var query = from e in db.tblEstimateLangPairs
                join lp in db.tblLangPairs on e.LangPairID equals lp.ProductID
                where e.EstimateID == estimateID
                select new { e.EstimateID, e.LangPairID, lp.Language_pairs};

    model.EstimateLanguagePairs = query.ToList().ConvertAll(p => new tblEstimateLangPair
    {
        EstimateID = p.EstimateID,
        LangPairID = p.LangPairID,
        Language_pairs = p.Language_pairs
    });

    return PartialView(model);
}

В моем «частичном» виде у меня есть элементы управления для объекта оценки и списков языковых пар:

<%: Html.TextBoxFor(model => model.Estimate.JobNumber)%>
<%= Html.ListBoxFor(model => model.LanguagePairs, new SelectList(Model.LanguagePairs, "LangPairID", "Language_pairs"))%>
<%= Html.ListBoxFor(model => model.EstimateLanguagePairs, new SelectList(Model.EstimateLanguagePairs, "LangPairID", "Language_pairs"))%>

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

Моя проблема - когда я пытаюсь отправить это обратно в контроллер, чтобы сохранить любые изменения. У объекта Model.Estimate нет проблем с сохранением всех его свойств обратно в контроллер. Когда я смотрю на модель в методе контроллера, который будет сохранять изменения, я вижу список объектов, но их количество равно нулю.

Метод сохранения в контроллере:

[HttpPost]
public ActionResult EditEstimate(EstimateModel model)
{
    db.tblEstimates.Attach(model.Estimate);
    db.ObjectStateManager.ChangeObjectState(model.Estimate, EntityState.Modified);

    foreach (tblEstimateLangPair langPair in model.EstimateLanguagePairs)
    {
        db.tblEstimateLangPairs.Attach(langPair);
        db.ObjectStateManager.ChangeObjectState(langPair, EntityState.Modified);
    }

    db.SaveChanges();

    return Redirect("/Home/Index");
}

Как вы сохраняете списки или коллекции в модели обратно в контроллер при отправке данных формы? Я считаю, что моя проблема где-то заключается в том, как я использую эти объекты ListBoxFor.

Любая помощь будет принята с благодарностью!

1 Ответ

2 голосов
/ 08 мая 2011

Сначала загрузите скрипач и просмотрите ваш запрос. Я предполагаю, что все элементы из вашего списка не публикуются - в этом случае не будет привязки к модели.

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