Vivek.anand34 Ответов: 3

Как использовать несколько моделей в одном представлении в MVC


Дорогие Друзьях,

Я разрабатываю экран заказа на покупку в mvc.. У меня есть две модели "MRHdr" и "MRDtl", как использовать две модели в одном представлении. Я пытаюсь 3 дня, пожалуйста, помогите мне...

Например. Значений TextBox сохранить в и значения матрицы MRHdr 'сохранить 'MRDtl'

Что я уже пробовал:

Модели: публичный класс MRHdr
{
[Ключ]
public int Id { get; set; }
публичная строка MRNo { get; set; }
public DateTime MRDate { get; set; }
замечания общественности строку { получить; набор; }
}
публичный класс MRDtl
{
[Ключ]
public int Id { get; set; }
публичная строка MRNo { get; set; }
публичная строка IRateCode { get; set; }
общественного строка артикул { получить; набор; }
public int QtyRequested { get; set; }
}
модель представления:
публичный класс VwModel
{
public MRHdr MRHdr { get; set; }
public MRDtl MRDtl { get; set; }
}
Контроллер:
public ActionResult Create()
{
MRHdr objMRHdr = new MRHdr () { MRNo = "", MRDate = DateTime.Сейчас };
MRDtl objMRDtl = new MRDtl () { IRateCode = "", ItemCode ="", QtyRequested = 0 };
Модель списка = новый список();
модель.Добавить (new VwModel { MRHdr = objMRHdr, MRDtl = objMRDtl });

обратный вид(модель);
}

Смотреть:
@модель связи.модель представления.VwModel
@использование (в формате HTML.Бигинформ("Создать", "MatReq", FormMethod.Почта))
{

@{Html. RenderPartial ("_MRHdrs", Model.MRHdr);}
@{Html. RenderPartial ("_MRDtls", Model.MRDtl);}

}

Частичный Вид:1
@model List & lt; Telecom.Модели.MRDtl >

Частичный Вид:2
@модель связи.Модели.MRHdr

Philippe Mori

Используйте блок кода для вашего кода...

Кстати, ответ на такой вопрос очень легко найти с помощью Google...

3 Ответов

Рейтинг:
18

Karthik_Mahalingam

попробуй вот так


public ActionResult Create()
       {
           MRHdr objMRHdr = new MRHdr() { /* initialise the properties*/ };
           MRDtl objMRDtl = new MRDtl() { /* initialise the properties*/  };
           VwModel model = new VwModel{ MRHdr = objMRHdr, MRDtl = objMRDtl };
           return View(model);
       }
       public ActionResult GetList()
       {
           MRHdr objMRHdr = new MRHdr() { /* initialise the properties*/ };
           MRDtl objMRDtl = new MRDtl() { /* initialise the properties*/  };
           List<VwModel> model = new List<VwModel>();
           model.Add( new VwModel{ MRHdr = objMRHdr, MRDtl = objMRDtl }); // sample
           model.Add(new VwModel { MRHdr = objMRHdr, MRDtl = objMRDtl }); // sample
           return View(model);
       }


Vivek.anand34

Спасибо.. Но ошибка вроде этой:
Элемент модели, передаваемый в словарь, имеет тип ' System.Коллекции.Generic. List`1[Telecom.модель представления.VwModel]', но для этого словаря требуется элемент модели типа ' Telecom.модель представления.VwModel'.

Karthik_Mahalingam

использовать @модель связи.модель представления.VwModel для получения только одного элемента
и список модель&л@; Телекоммуникации.модель представления.vwmodel &ГТ; для список модель

Vivek.anand34

Как инициализировать свойства в объекте, например.

Karthik_Mahalingam

подобный этому
{ new MRDtl { IRateCode="", ItemCode ="", QtyRequested=0 } };

Vivek.anand34

Та же ошибка: u см. выше вид, что данная модель правильна или нет..

Элемент модели, передаваемый в словарь, имеет тип ' System.Коллекции.Generic. List`1[Telecom.модель представления.VwModel]', но для этого словаря требуется элемент модели типа ' Telecom.модель представления.VwModel'.

Karthik_Mahalingam

использовать это
@модель связи.модель представления.VwModel

Vivek.anand34

я использую только это..

Vivek.anand34

public ActionResult Create()
{
MRHdr objMRHdr = new MRHdr () { MRNo = "", MRDate = DateTime.Сейчас };
MRDtl objMRDtl = new MRDtl () { IRateCode = "", ItemCode ="", QtyRequested = 0 };
List<vwmodel> model = новый список<vwmodel>();
модель.Добавить (new VwModel { MRHdr = objMRHdr, MRDtl = objMRDtl });

обратный вид(модель);
}

Karthik_Mahalingam

это должно сработать для
список моделей&л@; Телекоммуникации.модель представления.vwmodel &ГТ;

Vivek.anand34

Я обновил общий код выше..

Karthik_Mahalingam

публичный класс VwModel
{
public MRHdr MRHdr { get; set; }
публичный список< MRDtl> MRDtl { get; set; }
}



public ActionResult Create()
{
MRHdr objMRHdr = new MRHdr () { MRNo = "", MRDate = DateTime.Сейчас };
MRDtl objMRDtl = new MRDtl () { IRateCode = "", ItemCode ="", QtyRequested = 0 };
List < mrdtl > lstDetails = новый список & lt; mrdtl > ();
lstDetails.Добавить (objMRDtl);
VwModel model = new VwModel () { MRHdr = objMRHdr, MRDtl = lstDetails };

обратный вид(модель);
}


Vivek.anand34

Да теперь ошибки решены... Большое спасибо!......

Karthik_Mahalingam

крутой

Рейтинг:
1

Philippe Mori

Уже была написана статья, объясняющая многие способы достижения этой цели.

С помощью поиска в Google

mvc multiple models c#
, было легко найти нужную вам информацию. Вы можете попробовать это сами: Гугл[^]

Несколько моделей в представлении в ASP.NET MVC 4 / MVC 5[^]

Этот вопрос также уже был задан в Stack Overflow:`
asp.net mvc-несколько моделей в представлении-переполнение стека[^]

Обычно я делаю другую модель, которая содержит обе модели в качестве свойств, а затем создаю частичное представление для каждой части. Это хорошо работает, если каждая часть по существу независима (например, объединение 2 страниц в одну).


Vivek.anand34

Та же ошибка: u см. выше вид, что данная модель правильна или нет..

Элемент модели, передаваемый в словарь, имеет тип ' System.Коллекции.Generic. List`1[Telecom.модель представления.VwModel]', но для этого словаря требуется элемент модели типа ' Telecom.модель представления.VwModel'.

Vivek.anand34

public ActionResult Create()
{
MRHdr objMRHdr = new MRHdr () { MRNo = "", MRDate = DateTime.Сейчас };
MRDtl objMRDtl = new MRDtl () { IRateCode = "", ItemCode ="", QtyRequested = 0 };
Модель списка = новый список();
модель.Добавить (new VwModel { MRHdr = objMRHdr, MRDtl = objMRDtl });

обратный вид(модель);
}

Рейтинг:
0

sankholia

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


Vivek.anand34

Я обновил свой общий код выше.. Ошибка: элемент модели, переданный в словарь, имеет тип ' System.Коллекции.Generic. List`1[Telecom.модель представления.VwModel]', но для этого словаря требуется элемент модели типа ' Telecom.модель представления.VwModel'.