2011-07-28 13 views
0

私は例の一つに言及し、それのASPXページにしては、このコードが書かれている:私はちょうどお客様へKandaAlpha.Domain.Model.Entities.Customerを書き込むことができますどのようにどのように各ループのAsp.Net MVCで名前空間を取り除くことができますか?

<% foreach (KandaAlpha.Domain.Model.Entities.Customer customer in (List<KandaAlpha.Domain.Model.Entities.Customer>)(ViewData["Customers"])) 
     { %> 
    <tr> 
     <td> 
      <%= customer.CustomerID%> 
     </td> 
     <td> 
      <%=customer.FullName%> 
     </td> 
     <td> 
      <%=customer.LastUpdatedOn.ToString()%> 
     </td>   
    </tr> 
    <% } %> 

?インポート名前空間コードはどこで書くべきですか?事前に

感謝:)

答えて

4

ビューの初めに<%@ Importステートメントを使用することにより:

<%@ Import Namespace="KandaAlpha.Domain.Model.Entities" %> 

またはあなたのweb.configファイルの<namespaces>セクションに名前空間を追加することにより、この場合の

<pages> 
    <namespaces> 
    <add namespace="System.Web.Helpers" /> 
    <add namespace="System.Web.Mvc" /> 
    <add namespace="System.Web.Mvc.Ajax" /> 
    <add namespace="System.Web.Mvc.Html" /> 
    <add namespace="System.Web.Routing" /> 
    <add namespace="KandaAlpha.Domain.Model.Entities"/> 
    </namespaces> 
</pages> 

または、私があなたに推奨する方法は、ViewDataとuを削除することですモデルを表示し、テンプレートを表示します。この場合、あなたの全体foreachループが消え、下記のものライナーによって置換される:

<table> 
    <%= Html.DisplayFor(x => x.Customers) %> 
</table> 

と、対応する表示テンプレート(~/Views/Shared/DisplayTemplates/Customer.ascx)内部の各要素のためにレンダリングされる顧客のテンプレートを定義しますあなたのビューモデルのCustomersコレクション:

<%@ Control 
    Language="C#" 
    Inherits="System.Web.Mvc.ViewUserControl<Customer>" 
%> 
<tr> 
    <td><%= Html.DisplayFor(x => x.CustomerID) %></td> 
    <td><%= Html.DisplayFor(x => x.FullName) %></td> 
    <td><%= Html.DisplayFor(x => x.LastUpdatedOn) %></td> 
</tr> 

もあるため、あなたの顧客のフルネームは、あなたがそれをコードするHTMLされていないよう<script>alert('I hacked you');</script>あなたがトラブルに巻き込まれる可能性がある場合Html.DisplayForの使用を注意してください。

我々はViewDataを取り除くと、私はいつも私たちの見解は本当にシンプルで読みやすいとなってお勧めするものであるビューモデルを使用して起動得ればあなたが見ることができるように。

+0

この特別なフォルダは '〜/ Views/Shared/DisplayTemplates /'ですか?他の魔法のフォルダ、つまりコントローラ、モデルなど? – Jaggu

+1

@Bob:はい、それは慣行に基づいています。表示テンプレートは、〜/ Views/YourController/DisplayTemplates /にあり、エディタテンプレートと同等の規則があります(どこでも "Editor"の "Display"を切り替えてください)。 –

+1

@Bob Lee Swagger、はい特別です。 '〜/ Views/YourControllerName/DisplayTemplates'を使うこともできます。これは、ASP.NET MVCが最初にテンプレートを探す場所で、見つからなければSharedフォルダに移動します。特定のコントローラに対してのみ有効なテンプレートに役立つ可能性があります。 –

0
<%@ Page Title="" Language="C#" MasterPageFile="~/Themes/Whatever/Site.Master" Inherits="System.Web.Mvc.ViewPage<Whatever.ViewModels.MyViewModel>" %> 
<%@ Import Namespace="KandaAlpha.Domain.Model.Entities" %> 
<%= //content %> 
関連する問題