0

私のメイン ビューでは、空のプレースホルダー div があり、ユーザーがクリックすると内部ビューが表示されます。メイン ビューに同じ内部ビューの複数のコピーを作成し、各内部ビューに異なるデータを関連付けたいと考えています。

メイン ビューには独自のモデルとコントローラーがあり、内部ビューには独自のモデルとコントローラーがあります。メイン ビューでアイテムが選択されると、内側のビューには選択に関連するデータが表示されます。選択された項目の ID に基づいて Web サービスからこのデータを取得するため、その時点まで内部ビューのモデルにデータを入力することはできません。

複数のビュー div がすべて同じ ID を持つことはできないため、@Ajax.ActionLinkwithのようなものは使用できませんUpdateTargetId。代わりに、それを宣言し<div class='placeholderDiv' title='@[some_unique_id]'>、メイン ビューで以下を使用して複数の div を正常に描画できます。

$.ajax(
{
    type: 'POST',
    data: { 'id': id },
    dataType: 'html',
    url: '/MyController/MyMethod',
    success: function (result) {
        $(".placeholderDiv[title=" + id + "]").html(result);
    }
});

ここで、ユーザーが内部ビューでモデルを更新できるようにしたいと考えています。内部ビューのコントローラーでこれを行うことはできますが、変更を表示できません。placeholderDiv内部ビューから、メイン ビューのクラスで div にアクセスするにはどうすればよいですか?

4

1 に答える 1

1

これは、「内部ビュー」をクライアント側のテンプレートに「アウトソーシング」するための良い候補のように思えます。そうすれば、標準のテンプレートをどこか (おそらくメイン ビューで?) に定義することができ、サービスからモデルを取得し、それをテンプレートのコピーにバインドし、それをページにレンダリングするだけです。 .

私が今注目している優れたテンプレート ライブラリは、DustJSです。それを使用して、次のようにテンプレートを定義できます (これはページで 1 回だけ定義する必要があることに注意してください)。

<div id="{id}">
    <h1>{name}</h1>
    {?accounts}
    <ul>
        {#accounts}
        <li>Account Number : {accountNumber}</li>
        {/accounts}
    </ul>
    {:else}
    <p class="error">No accounts for this user.</p>
    {/accounts}
</div>

... 次に、次のようなモデルをバインドします (サービスから返される可能性があります)。

{ 
    id : '123456',
    name : 'TheBeatlemaniac',
    accounts : [
        { accountNumber : 'FOO1234' },
        { accountNumber : 'BAR1234' },
        { accountNumber : 'FOB1234' }
    ]
}

...そして、マークアップを次のように自動的にレンダリングします。

<div id="123456">
    <h1>TheBeatlemaniac</h1>
    <ul>
        <li>Account Number : FOO1234</li>
        <li>Account Number : BAR1234</li>
        <li>Account Number : FOB1234</li>
    <ul>
</div>

...そして最後に、好きなようにそれをメイン ビュー コンテナーに貼り付けることができます。

やりたいことを実行する方法は間違いなく他にもありますが、返さなければならないのは(たとえば)モデルに対応するJSONデータだけであるため、(一般的に)帯域幅が軽くなるという理由でこれをお勧めします. サービスからデータを要求し、キーが変更されただけの固定 HTML マークアップが返された場合、冗長性がすぐに追加されます。サーバー側のコードが必要と思われる処理の一部を解放するようにすると、それは良いことかもしれません。

于 2013-06-10T23:54:49.580 に答える