Как передать и объединить две модели в MVC3 в индексном и редактируемом представлении (строго привязанный)?

#asp.net #asp.net-mvc-3 #asp.net-mvc-2 #razor

#asp.net #asp.net-mvc-3 #asp.net-mvc-2 #бритва

Вопрос:

Связь между моделью и объектом базы данных (базовый заполнитель литературного содержимого):

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

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

Мощность => 1 TitlePercent до * titlemonth

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

 _____________________________
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.Название ежемесячно

 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. Мэрайя, это тоже было камнем преткновения для меня.

Ответ №1:

Обычно вы используете нечто, называемое a 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)
}
 

Комментарии:

1. Привет BuildStarted: как я могу сопоставить это пользовательское представление? Я получаю нули, возвращающиеся из моего представления?