2

私はASP.NetMVCを初めて使用し、これまで常にWebフォームを使用してきました。MVCでITemplateの代替品を見つけましたか?これは、タイトルとコンテンツをラップするBeginBlockという名前のHTMLヘルパーを作成する例を示しています。

@using (Html.BeginBlock("MY TITLE")) {
       MY CONTENT GOES HERE
}

<div>
  <div><h1>MY TITLE</h1></div>
</div>
MY CONTENT GOES HERE

Webフォームでは、複数のITemplatesを使用してユーザーコントロール内のコンテナーを定義し、それをHTML内にラップしたシナリオがあります。たとえば、Webフォームでは、Panelという名前のユーザーコントロールを作成し、2つのITemplateプロパティを1つ持つことができます。名前付きのContentと他の名前付きのContentNonScrollable。次に、次のマークアップを使用してユーザーコントロールを使用します。

<MySite:Panel>
    <Content>
        Content 1 Goes Here
    </Content>
    <ContentNonScrollable>
        Content 2 goes here
    </ContentNonScrollable>
</MySite:Panel>

ユーザーコントロールは、次のHTMLを出力します。

<div class="my-panel">
    <div class="my-panel-content">
        Content 1 Goes Here
    </div>
    <div class="my-scrollable-panel-content">
        Content 2 Goes Here
    </div>
</div>

MVCには、HTMLヘルパー(またはその他)を介して、.cshtmlテンプレートファイル内のマークアップを介して上記のWebフォームの例と同等の何かを考案できる方法はありますか?

たとえば、次のようなものです(明らかに、以下は正しい構文ではありません。私たちが考えていることを説明するためだけです)。

@using (Html.BeginPanel() {
       {
            Content 1 Goes Here
       }
       {
            Content 2 Goes Here
       }
}
4

3 に答える 3

1

これにはセクションを使用できます。セクションはレイアウト(つまりマスターページ)用に設計されていますが、マスターページをネストしてセクション領域を作成できます。

しかし、ある種のコントロールとしてこれを実行したいようです。別のオプションは、テンプレート化されたかみそりの代表者かもしれません

もう1つのオプションは、エディター/表示テンプレートですが、これは通常、マークアップのみではありません。変数を使用してコンテンツを渡します。

もう1つのオプションは、部分ビューを使用し、ViewDataを使用してコンテキストセクションを渡すことです。

実際には、これを実行する方法はたくさんあり、どちらを選択するかはニーズによって異なります。具体的な状況を説明していただけますか?

于 2012-10-04T20:04:59.093 に答える
0

理由がわかりません。私はこれを自分で試したことはありませんが、.cshtmlページでマークアップとスクリプトを混在させることができるので、次のようなことができるはずです。

@using (Html.BeginPanel()) { 
  @using(Html.BeginScrollableContent()) {
     Content 1 goes here
  }
  @using (Html.BeginNonScrollableContent()) {
     Content 2 goes here
  }
}

私はあなたが参照している投稿(良いもの、ところで)を見ました、そしてあなたは実装が行く限りその例に従うことができるはずです。

于 2012-10-04T19:55:49.317 に答える
0

テンプレート化されたデリゲートと、htmlマークアップを含む文字列を受け入れる変数を持つモデルを取得する部分ビューに案内してくれた@mystereのおかげで、上記のシナリオで考えていたものと十分に同等の次の回避策を見つけました。

名前付きの部分ビューを作成し_PanelPartial.cshtml、モデルを_PanelPartialModel次のプロパティを含むタイプに設定します。

public class _PanelPartialModel
{
    public Func<dynamic, HelperResult> Content { get; set; }
    public Func<dynamic, HelperResult> NonScrollableContent { get; set; }
}

内で_PanelPartial.cshtml、次のようなものを作成できます。

@model _PanelPartialModel
<div class="my-testing-panel">
    <p>hello this is heading text</p>
    <div class="my-testing-panel-content">
        @Model.Content(null)
    </div>
    <p>And this is something in between madafuker!</p>
    <div class="my-testing-panel-scrollable-content">
        @Model.NonScrollableContent(null)
    </div>
    <p>and what about another footer!</p>
</div>

@ Model.Content(null)および@ Model.NonScrollableContent(null)は、モデル内のデリゲート変数の呼び出しです。プレースホルダーとしてのこれらのサーバー。

次に、このパネルを使用する必要があるときはいつでも、次のようなものを使用できます。

@Html.Partial("_PanelPartial", new _PanelPartialModel() {
    Content = @<text>
                <div>This is the scrollable content</div>
          </text>, 
    NonScrollableContent = @<text>
                            <h2>This is non scrollable content</h2>
                       </text>
});

これにより、最終的に次のHTMLマークアップが生成されます。

<div class="my-testing-panel">
    <p>hello this is heading text</p>
        <div class="my-testing-panel-content">
            <div>This is the scrollable content</div>
        </div>
    <p>And this is something in between madafuker!</p>
        <div class="my-testing-panel-scrollable-content">
            <h2>This is non scrollable content</h2>
        </div>
    <p>and what about another footer!</p>
</div>
于 2012-10-05T14:28:35.817 に答える