2011-12-19 6 views
1

私のアプリには現在のCountryId、DocumentModeなどのアンビエントプロパティがあります。in a previous questionを学んだので、これらのプロパティの現在の値をセッションに保存するのではなく、すべてのページリクエスト。ここまでは順調ですね。MVCでモードパラメータを処理する正しい方法は何ですか?

私はページを構築するときに、私はすべてのアクションのリンクは次のように見えること手配したい:?

/コントローラ/アクションCountryId = X & DocumentMode = Y & ...

私がすることができますクエリ文字列をチェックし、これらの変数のそれぞれの現在の値を滑ることで簡単にこれを行うことができます。

質問は、値のいずれかが変更されたときにアプリに通知する正しい方法は何ですか?

具体的には、各ビューの上部には、すべての国を示す選択ドロップダウンリストがあります。あなたが新しいものを選んだとき何が起こるはずですか?

変更は、クエリ文字列のCountryIを置き換え、元のページをリロードするだけで新しいCountryIdが設定されたアクションを呼び出し、新しいアクションリンクが再構築されるように、javascript関数呼び出しをトリガーします。しかし、これはクルージングのようです。これを行うためにサーバーを更新することなくページ上のすべてのリンクを更新するよりエレガントな方法はありますか? (私はいつもこれを行うためにいくつかのスクリプトを調理することができましたが、それは自明ではありません、そして、これを行うための方法があれば、私は車輪を再発明したくありません。)

ありがとう!

答えて

0

私はしばらくの間、物事を単純にし、すべてのリンクを再作成するページ全体をリフレッシュすることに決めました。私のアプリは少量で、これで十分です。サーバーが愚かにもそれほど強調されないようなアプリケーションを構築する必要があるなら、私はその場でのスワップについて説明します。

1

部分的に変更された部分をページに置き、コントロールが変更されるたびにAJAX経由でそのビューをリロードすることができます。

Partial rendering after page loaded

代わりにあなただけのすべてのリンクを更新するには、いくつかのJavaScriptを書くことができます。いくつかのコードを投稿すれば、それを書く良い方法についていくつかの提案を得るでしょう。

+0

再作成が必要なリンクを含むパーツだけを再レンダリングすると、ページ全体がリフレッシュされるよりも良いと思われますが、複雑さが増していくかどうかはわかりません。リンクを変更する必要があり、私はまだサーバーコールを持っています。しかし、リンクを変更するアイデアは合理的かもしれません。おそらく、すべてのリンクをループしてパラメータ値を入れ替えるのは簡単で速いでしょう。私はそれを念頭に置いて私の質問を更新します。ありがとう。 –

+0

また、パラメータの現在の値は現在のページのクエリ文字列にあり、すべてのリンクを変更してもアドレスバーの値を更新しないのは最高ではないと思われます。実際にナビゲートせずにアドレスバーを更新する方法はありますか? –

+0

古いブラウザでは、ハッシュ後の内容のみを変更できます。 HTML5ブラウザで変更することができます。 https://github.com/balupton/history.js – Ryan

関連する問題