2016-06-22 2 views
-1

Я новичок в MVC, возникла проблема с созданием простого пользовательского интерфейса. Я должен отображать модель в представлении и поддерживать разбивку на страницы. В моем представлении будет отображаться каждый столбец, а под именем столбца должно быть либо текстовое поле, либо выпадающее меню для фильтрации данных.Просмотр без итерации через IEnumerable модель C#

Моя модель как ниже

public class ViewModel : ViewModelBase 
{ 
    public long Id { get; set; } 

    [DisplayName("Name")] 
    public string Name{ get; set; } 

    [DisplayName("Full Name")] 
    public string fullName{ get; set; } 

    [DisplayName("State")] 
    public string adressState{ get; set; } 

    [DisplayName("Grade")] 
    public string grade{ get; set; } 

    public MultiSelectList grades{ get; set; } 
    public MultiSelectList adressState{ get; set; } 
    } 

Я передаю IEnumerable модель для просмотра и моя точка зрения должна быть ниже

<div class="dataTable"> 
<table id="mainTable"> 
    <thead> 
     <tr > 
      <th ></th> 
       @Html.HiddenFor(model => model.Id) 
      <th> 
       @Html.DisplayNameFor(model => model.Name) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.fullName) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.address) 
      </th> 
      <th> 
       @Html.DisplayNameFor(model => model.grade) 
      </th> 
     </tr> 
     <tr > 
      <th> 
       <img src="~/Images/someimage.png" alt="Options" height="25" width="25" /> 

      </th> 
       @Html.HiddenFor(model => model.Id) 
      <th> 
       @Html.TextBoxFor(model => model.name, new { onkeyup = "handleKeyPress(event, this)", placeholder = "Search", @class = "TextBox searchProperties" }) 
      </th> 
      <th> 
       @Html.TextBoxFor(model => model.fullName, new { onkeyup = "handleKeyPress(event, this)", placeholder = "Search", @class = "TextBox searchProperties"}) 
      </th> 
      <th> 
       @Html.ListBoxFor(model => model.adressState, Model.adressStateItemList as MultiSelectList, new { onchange = "handleDropdownChange()", @id = "adressStateDropDown", 
       @class = "searchProperties" }) 

      </th> 
      <th> 
       @Html.ListBoxFor(model => model.gradeItem, Model.gradeItemList as MultiSelectList, new { onchange = "handleDropdownChange()", @id = "gradeDropDown", 
       @class = "searchProperties" }) 
      </th> 
     </tr> 
    </thead> 
    <tbody id="tableResults"> 
     @{Html.RenderPartial("_StudentPartial", Model);} 
    </tbody> 
</table> 

студент частичного должен иметь для каждого цикла, чтобы через данные модели и отображение. Я не могу привязать свою модель к просмотру и отображению данных, так как мой основной вид предполагает, что модель для отображения текстового поля для свойства и частичного представления ожидает IEnumerable модели. Я пробовал @ Html.Partial ("_ studentPartial", новый IEnumerable < .solution.ViewModel>) , но не работает. Может ли кто-нибудь предложить решение?

+2

Если представление показывается имеет модель * одного экземпляра * чего-то, как вы ожидаете, чтобы вывести * * список чего-то? Вы можете превратить корзину яблок в отдельные яблоки, но вы не можете превратить отдельное яблоко в корзину яблок. Кроме того, вы не можете создать «новый» экземпляр * интерфейса *, только * класс *. – David

+0

Отображаемое представление подразумевает, что модель представляет собой единый экземпляр, а не коллекцию. И если модель была коллекцией, зачем вам ее конвертировать в коллекцию во внутреннем виде? Это не имеет никакого смысла. – David

+0

Если модель представляет собой коллекцию, то как вообще работает какой-либо из HTML-помощников в этом представлении? Также появляются ссылки на свойства, которые даже не на модель вообще, а также модель, как представляется, имеет несколько свойств с тем же именем. Этот код даже не может компилироваться по нескольким причинам. Возможно, вы захотите выполнить резервное копирование и вернуться к некоторым учебникам MVC. – David

ответ

0

Частичный вид не должен быть связан с IEnumerable, если его целью является отображение одного элемента. Он должен быть привязан к экземпляру одной модели.

Если основной вид связан с IEnumerable<ViewModel>, то привяжите его к ViewModel.

Затем в главном окне,

foreach(var item in Model) 
{ 
    @{Html.RenderPartial("_StudentPartial", item);} 
} 
Смежные вопросы