3

私はいくつかのサンプルコードをチェックしていましたが、次のようなものを見ました:

@(Html.DataList<ProductOverviewModel>(Model, 4,
      @<div class="item-box">
        <div class="item">
          <div class="picture">
            <a href="@Url.RouteUrl("Product", new { productId = item.Id, SeName = item.SeName })" title="@item.DefaultPictureModel.Title">
              <img alt="@item.DefaultPictureModel.AlternateText" src="@item.DefaultPictureModel.ImageUrl" title="@item.DefaultPictureModel.Title" /></a>
          </div>
          <div class="product-title">
            <a href="@Url.RouteUrl("Product", new { productId = item.Id, SeName = item.SeName })" title="@item.DefaultPictureModel.Title">
              @item.Name</a>
          </div>
        </div>
      </div>
))

したがって、基本的には、DataList署名であるヘルパーメソッドがあります。これは次のとおりです。

public static IHtmlString DataList<T>(this HtmlHelper helper, IEnumerable<T> items, int columns, Func<T, HelperResult> template) where T : class

そして、彼らは次の部分を次のように渡しましたFunc<T,HelperResult> template。それは完全に機能します:

  @<div class="item-box">
    <div class="item">
      <div class="picture">
        <a href="@Url.RouteUrl("Product", new { productId = item.Id, SeName = item.SeName })" title="@item.DefaultPictureModel.Title">
          <img alt="@item.DefaultPictureModel.AlternateText" src="@item.DefaultPictureModel.ImageUrl" title="@item.DefaultPictureModel.Title" /></a>
      </div>
      <div class="product-title">
        <a href="@Url.RouteUrl("Product", new { productId = item.Id, SeName = item.SeName })" title="@item.DefaultPictureModel.Title">
          @item.Name</a>
      </div>
    </div>
  </div>

これはどのような規則で、どのように可能ですか?

4

1 に答える 1

2

あなたはすでにそこにすべての単語を持っています:)あなたが見ているのは「テンプレート化されたRazor Delegate」です。私はそれを説明することができますが、フィル・ハークはここでそれをはるかにうまくやっています: http://haacked.com/archive/2011/02/27/templated-razor-delegates.aspx

于 2012-10-15T02:38:59.007 に答える