2

私はASP.Net MVCにかなり慣れていません。「Result」と呼ばれる複数のカスタム オブジェクトで List<> を満たすモデルを作成しました。次に、コントローラーでこの List を取得し、ViewData に入れます。

ビュー (aspx ページ) でこのリストを使用する方法について、私は少し途方に暮れています。私の最初の試みは、ViewData["Results"] を <% %> の間に配置することでしたが、明らかにこれは機能していません。何らかの方法でキャストし、Result カスタム オブジェクトの元の定義も参照する必要があると思われます。ただし、aspx ページはこのタイプのコーディング用にセットアップされているようには見えません...そしてコード ビハインドはありません。私が見た例のほとんどは、カスタムオブジェクトを渡すというこのシナリオ、単純な文字列などをカバーしていないようです.

<% %> 構文だけを使用してこれをエレガントに行うことはできますか? コード ビハインド ページを作成してそこで処理する必要がありますか? その場合、デフォルトでは提供されていないため、どのように作成されますか。

4

1 に答える 1

1

アクションからビューに渡すオブジェクトとビューをシームレスに統合するには、ビューの上部にあるのInherits=属性を変更する必要があります。@Page directive

次の方法で、このオブジェクトをアクションからビューに渡すようにしてください。

public MyController : Controller 
{
     public ActionResult ShowResults()
     {
          List<Result> results = GenerateResults();
          return View(results); // this passes 'results' as the model of the view
     }
}

この場合、Resultビューにリストを渡すというカスタム オブジェクトがあります。したがって、@Pageディレクティブでをに変更しInherits=ます

Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>"

したがって、完全な@Pageディレクティブは次のようになります。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>" %>

Viewこれが行うことは、あなたModelがタイプであることを伝えることList<MyNameSpace.Models.Result>です。

ビューでは、Modelオブジェクトが自動的に型にキャストされるList<MyNameSpace.Models.Result>ため、次の操作をシームレスかつクリーンに実行できます。

<%@ Page Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<List<MyNameSpace.Models.Result>>" %>

<table>
   <tr>
      <th>Result PropertyOne</th>
      <th>Result PropertyTwo</th>
   </tr>

<% foreach(var result in Model){ %>

   <tr>
      <td><%: result.PropertyOne  %></td>
      <td><%: result.PropertyTwo  %></td>
   </tr>

<% } %>

</table>
于 2010-10-16T07:08:19.810 に答える