2016-06-22 2 views
-1

私はMVCを初めて使用していますが、単純なUIを作成しようとして問題が発生しました。私はモデルをビューに表示し、ページネーションをサポートしなければなりません。 私のビューには各列が表示され、列の名前の下にテキストボックスまたはドロップダウンのいずれかでデータのフィルタリングを実行する必要があります。私が見るためのIEnumerableモデルを渡していると、私の見解では、学生が部分をループするごとに持っている必要がありますよう IEnumerableモデルを反復せずに表示C#

<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> 

以下でなければならない

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が必要です。私は @ Html.Partial( "_ studentPartial"、新しいIEnumerable <。ソリューション.ViewModel>)を試しましたが、動作しません。誰かが解決策を提案できますか?

+2

あなたが何かの*リスト*を導出することを期待しますか、何かの*単一インスタンス*のモデルを持っていますか?リンゴのバスケットを個々のリンゴに変えることはできますが、個々のリンゴをリンゴのバスケットにすることはできません。また、* interface *の 'new'インスタンスを作成することはできません。* class *のみです。 – David

+0

表示しているビューは、モデルがコレクションではなく単一のインスタンスであることを示しています。モデルがコレクションの場合は、内部ビューのコレクションに変換する必要がありますか?これは意味をなさない。 – David

+0

モデルがコレクションの場合、このビューに既に入っているHTMLヘルパーはどのように動作しますか?また、モデルにはまったくないプロパティへの参照があるように見えるだけでなく、モデルには同じ名前の複数のプロパティがあるように見えます。このコードは複数の理由でコンパイルできません。少しバックアップして、いくつかのMVCチュートリアルに戻ってみてください。 – David

答えて

0

1つのアイテムを表示することが意図されている場合、部分ビューはIEnumerableにバインドされるべきではありません。単一のモデルインスタンスにバインドする必要があります。

メインビューがIEnumerable<ViewModel>にバインドされている場合は、ViewModelに部分をバインドします。ビューが表示されている場合は、あなたのメインビューで次に

foreach(var item in Model) 
{ 
    @{Html.RenderPartial("_StudentPartial", item);} 
} 
関連する問題