0

これに基づいて他のいくつかの質問を見てきましたが、Silverlightを扱うときに決定的な答えはありません。

私はSilverlight5とナビゲーションフレームワークを使用して、アプリケーションのさまざまな部分間を移動しています。私がやりたいのは、ユーザーがURLを更新したいアクションを実行するときに、アプリケーションへのディープリンクを提供することです。

呼び出すことでこれを実行できることはわかっていますNavigationService.Navigateが、そうすることで、ユーザーがそのビューに直接更新できるようにするか、アドレスバーから直接リンクを保存できるようにするだけで、ページ全体とビューモデルが再初期化されます。

javascriptを使用してこれを実行できるはずですが、Silverlight内でこれを実行する方法があり、誰かが知っている場合は、そうしません。

さらなる解明

私のページの1つはレポートです。このレポートにはすでにページング機能があります。私は実際にページをリロードせずにURLを更新できるようにしたいと思って#MyReport?Page=2います(私が言ったように、ページングは​​すでに処理されています)。何かをクリックするたびにページを完全にリロードせずに、OnNavigatingTo関数でクエリ文字列を処理するだけで済みます。これにより、ユーザーはそのURLをコピーして電子メールに入れるか、どこにでも入れたい場所に置くことができ、他のユーザーはそのURLに直接アクセスできます。

4

2 に答える 2

1

これはどこにも文書化されていませんが、URLにハッシュを手動で追加すると、アドレスバーにドル記号として表示されます。

したがって、ページをロードすると/MyReport、ナビゲーションフレームワークは、UriMapperを介してURLバーにページを配置します。#/MyReportクリックすると、レポート内の次のデータセット(またはフィルターなど、ナビゲート可能にすることを決定したもの)に移動します。このように)ナビゲーションサービスに移動するように指示できます。/MyReport#page=2&otherkey=othervalueナビゲーションフレームワークはこれを舞台裏で変更し#/MyReport$page=2&otherkey=othervalue、ページをリロードしません。

次に、にカスタム機能をOnNavigatedTo追加して、初期化を追加できます。コード内でこの値に反応すると、ドル記号が内のハッシュに戻りますNavigationService.CurrentSource

これは、Silverlightがブラウザー内の「hashchanged」イベントに反応し、適切にナビゲートしているためだと思います。開発者がナビゲーションを台無しにすることなくハッシュを追加できるようにする方法としてドル記号を処理しているようです。

アップデート

これによりURLが変更されますが、前方/後方ナビゲーションに基づいてURLを更新する方法はありません。ナビゲーションフレームワークは私の#を$に書き換えているので、すべての意図と目的に関してナビゲーションを行っていません。私たちはまだ同じページにいます。ブラウザを前後に押すと最後のURLに移動しますが、変更はトリガーされないため、手動で行う必要があります。これは、ページ内のオブジェクトのFragmentNavigationイベント内で実行できます。NavigationService適切に処理すると、同じSilverlightページ内で前後に移動できるようになります。

このソリューションでは、ページとビューモデルを常に再初期化することなく、ディープリンクと追加の前方/後方ナビゲーションの両方が可能です。

于 2012-11-20T00:29:13.847 に答える
0

簡単な答えはノーです。

クライアントからのリクエストはリクエストです。リダイレクトするか、単にコンテンツを送信することで、好きなコンテンツを配信することを決定できますが、リダイレクトせずにリクエストを変更することはできません。

ユーザーがmysite/contentaをリクエストし、本当にmysite / contentbを表示したい場合、唯一の質問は、アドレスバーに反映された新しいURLが表示されるようにリダイレクトするか、それとも単にmysite/contentbを配信してユーザーがアドレスバーに何を表示するかは気にしないでください。

于 2012-11-19T19:31:37.680 に答える