Как передать и объединить две модели в MVC3 в Index и Edit View (строго связанные)? - PullRequest
2 голосов
/ 21 октября 2011

Модель / Db Entity Relationship (базовый литературный контент заполнителя):

public class TitlePercent
{
   public int TitleName; 
   public decimal Percentage;      
}

public class TitleMonthly
{
   public string Month;
   public int Val;
}

Количество элементов => 1 заголовок в процентах * заголовок ежемесячно

Иллюстрированный вид (предлагается):

_____________________________
Name  | % ||  Jan | Feb |
_____________________________
Title1 2%     23    343
Title2 3%     343   3434
_____________________________

Контроллер (предлагается):

    // Need view and edit   
    public ViewResult ViewTitlePercentAndTitleMontly()
    {
        return View(db.<NotSureWhatWouldGoHere>.ToList());
    }

    public ActionResult EditTitlePercentAndTitleMontly(int id)
    {
        return View(db.<NotSureWhatWouldGoHere>.Find(id));
    }

Razor View (предлагается псевдо): ... Просмотр и редактирование @model MVC3.Models.TitlePercent @ model2 MVC3.Models.TitleMonthly

1. For Index View to show the grid not sure how to mash this up (like the grid)
   - Perhaps build this in the controller but not sure how to build and pass that to the view as
     I have had not dealt with multiple models as relationships.
2. For Edit View need to figure out how to bind to a model similar to:
    @Html.EditorFor(model => model.TitleName)
    @Html.EditorFor(model => model.Percentage)

    foreach TitleMonthly in TitlePercentag
    {
       @* Iterate and bind somehow *@
       @Html.EditorFor(model2 => model2.Month)
       @Html.EditorFor(model2 => model2.Val)
    }
    ???

Извините за отсутствие деталей и псевдокода, но мне просто не приходилось иметь дело с несколькими моделями, особенно если они связаны / зависят друг от друга и в которых сеточное представление может быть создано объединенными классами / таблицами. ... затем, если вы хотите отредактировать строку (комбинирование обоих классов, как вы можете связать все отношения с текстовыми полями на основе этих двух моделей классов)?

Опять же, я подчинюсь насмешкам над этим, но любая информация и примеры будут с благодарностью.

1 Ответ

3 голосов
/ 21 октября 2011

Обычно вы используете нечто, называемое ViewModel, которое является очень специфической моделью, разработанной для представления.Вы должны заполнить эту модель информацией из вашей модели данных и затем передать ее в представление.он не должен иметь структуру 1: 1, которая позволяет вам иметь намного больше информации или намного меньше, в зависимости от ваших потребностей.

Для вашей модели редактора вы можете создать ViewModel, подобную:

public class TitleEditingViewModel { 
    public TitlePercent TitlePercent {get;set;}
    public ICollection<TitleMonthly> MonthlyTitles {get;set;}
}

Затем вы заполняете эту модель в контроллере так, как вам нужно, и затем передаете модель в представление.

@Html.EditorFor(model => model.TitlePercent.TitleName)
@Html.EditorFor(model => model.TitlePercent.Percentage)

@foreach titleMonthly in Model.MonthlyTitles {
   @Html.EditorFor(model => titleMonthly.Month)
   @Html.EditorFor(model => titleMonthly.Val)
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...