0

この問題に頭を悩ませているかどうかわからないので、説明が不足していると思われる場合はご容赦ください。私はまだ MVC-3 の初心者です。

モデルから正しい動作でビューを生成する最良の方法がわからないMVCページがあります。モデルにはテキスト フィールド クラスのリストが含まれており、各クラスにはビューに表示される一連のテキスト フィールド ("HeadlineText"、"ButtonText"、"ColorText" など) が含まれています。テキスト フィールド クラスのリストは、ユーザーが設定した固有の言語ごとに、異なる言語ごとに一連のテキスト フィールドを作成できるようにします。

ビューには、テキスト フィールド クラスのリストに各言語/オブジェクトを含むドロップダウン リストがあり、ドロップダウンで選択されている言語オプションに基づいて、ビューに表示されるテキスト フィールドを変更したいと考えています。リスト (そしてそれに応じてこれを動的に変更します)。

私の当初の計画は、リスト内のすべてのオブジェクトのモデルからビュー内の html を生成し、javascript を使用して、ドロップダウン リストで選択した言語に属さないテキスト フィールドのセットを非表示/非表示にすることでした。ページ上に大量の余分な html を生成するという考えは本当に好きではありません。そのため、javascript を使用してすべてを変更できますが、ビューをリロード/再生成せずにビューを更新する方法は他にありません (I'ポストバックなしで、非同期に見えるようにしようとしています)。

アップデート:

部分的なビューについての提案は私が望んでいるようですが、他のコメント投稿者が意見を述べていないことについてまだ疑問に思っています. つまり、部分ビューを実行したい場合でも、テキスト フィールドを親モデルのデータにバインドする必要があり、(おそらくエディター テンプレートを使用して) 親ビュー/モデル/保存のためにフォームが送信されます。

bit.ly/N5DY5a と bit.ly/SVYqdT で他のことを読みました。それらを正しく理解していれば、テキスト フィールド リスト オブジェクトまたは親モデルを部分ビューに渡して、ビューが正しいフィールドのエディター テンプレートを生成し、それらを親モデルに関連付けることができるはずです。親フォームが送信されたときに保存されますか? まだ何もできていませんが、頑張っています...

4

2 に答える 2

3

解決

ビューを使用して、最初にページをレンダリングします。

次に、選択した値が変更されたら、ajax を使用して新しいコンテンツを取得します。

ここで、部分ビューを使用して、変更されたページの部分をレンダリングします。

部分ビューには、ビューと同じマークアップが含まれていますが、変更された部分だけです。

コントローラーで:

//get data

if (!Request.IsAjaxRequest())
{
    return View(data);
}
else
{
    return PartialView("myPartialView", data);
}

ビューで:

HTML :

...    
<div id="partialView"></div>
...

jQuery :

<script type="text/javascript">
    $(function () {
        $('#myDropdownlist').change(function () {
            $.get('/controller/action' + $(this).find(':selected').val(), function (data) {
                $('#partialView').html(data);
            }
        });
    });
</script>
于 2012-07-25T23:01:55.500 に答える
1

これを実現するために、Ajax で部分ビューを使用できます。

各言語の部分ビューを作成し、ユーザーの選択に応じて Ajax 呼び出しを実行して、ページのセグメントを部分ビューで更新/置換します。

部分ビューの詳細

于 2012-07-25T23:02:52.993 に答える