2016-10-13 5 views
0

Я только что закончил 2 представления, вставку и индексный указатель, и я должен сказать, что нелегко иметь дело с несколькими таблицами. «Вставить» было проще, я просто должен был добавить 2 разных таблиц:MVC 5 Viewmodel и несколько таблиц

[HttpPost] 
public ActionResult Index(CustPlayerVM custPlayer) 
{ 
    var Cust = new Cust() 
    { 
     CustID = custPlayer.CustID, 
     Color = custPlayer.Color 
    }; 
    var Player = new Player() 
    { 
     PlayerName = custPlayer.PlayerName 
    }; 
    db.Custs.Add(Cust); 
    db.Players.Add(Player); 
    db.SaveChanges(); 
    return View(); 
} 

Проблема заключается в том, что у меня были все виды ошибок со списком <> и IEnumberable <> пытается закодировать вид. Либо вы получаете ужасный «элемент модели, переданный в словарь, либо тип», либо нулевую ссылку в представлении, когда был обработан цикл «foreach». Это было чудо, что это сработало, но я не могу сказать, почему. Вот почему я поставил вопрос для начала. Вот что «вид» выглядит следующим образом:

public ActionResult List() 
{ 
    ViewBag.Message = "custPlayer"; 
    //CustPlayerVM vm = new CustPlayerVM();  

    List<object> vm = new List<object>(); 
    vm.Add(db.Custs.ToList()); 
    vm.Add(db.Players.ToList());   
    ViewBag.PlayerCnt = db.Players.Count(); 
    return View(vm); 
} 

Обратите внимание на список (в отличие от ViewModel, что закомментирована). И это Вид:

@model IEnumerable<object> @{ 
    List<viewModelA.Cust> lstCust = Model.ToList()[0] as List<viewModelA.Cust>; 
    List<viewModelA.Player> lstPlayer = Model.ToList()[1] as List<viewModelA.Player>; } 

    @Html.ActionLink("Create New", "Create") </p> <table class="table"> 
    <tr> 
     <th> 
      @Html.Raw("Color") 
     </th> 
     <th> 
      @Html.Raw("CustID") 
     </th> 
     <th> 
      @Html.Raw("ID") 
     </th> 
     <th> 
      @Html.Raw("Player Name") 
     </th> 
     <th> 
      @Html.Raw("PlayerID") 
     </th> 
    </tr> 
    &nbsp; 
    @for (int i = 0; i < ViewBag.PlayerCnt; i++) 
    { 
     <tr> 
      <td>@lstCust[i].Color</td> 
      <td> @lstCust[i].CustID</td> 
      <td> @lstCust[i].ID </td> 
      <td> @lstPlayer[i].PlayerName </td> 
      <td> @lstPlayer[i].ID</td> 
     </tr> 
    } </table> 

мне пришлось обернуть цикл вокруг кода, так как Еогеасп побежал для каждой таблицы отдельно.

В будущем, как вы должны иметь дело с IEnumerable против анонимных типов? Это не должно быть так сложно, правильно?

ответ

0

Чтобы улучшить код, который я настоятельно рекомендую, чтобы исследовать более подробно в OOP basics и .NET основы, в том числе, как работать с коллекциями (Array, List, Collection, IEnumberable, foreach).

Тогда следующие идеи будут очевидны:

  1. Создать общий класс ViewModel, который будет представлять состояние Вид

    class PersonViewModel{ 
        public int CustID {get;set;} 
        public string Color {get;set;} 
        public string PlayerName {get;set;} 
    } 
    
  2. Используйте этот общий класс для зрения

    public ActionResult List() 
    { 
        var viewModel = new List<PersonViewModel>();  
        viewModel.Add(db.Custs.ToArray()); 
        viewModel.Add(db.Players.ToArray());   
    
        return View(viewModel); 
    } 
    
  3. Вместо списка общего типа объекта применяют сбор вашего персонального образцаМодель типа

    @model IEnumerable<PersonViewModel> 
    
        <table class="table"> 
         @foreach(var personVM in Model){ 
         <tr> 
          <td>@personVM.Color</td> 
          <td>@personVM.CustID</td> 
          <td>@personVM.PlayerName</td> 
         </tr> 
         } 
        </table> 
    

 Смежные вопросы

  • Нет связанных вопросов^_^