0

以下に示すように、Telerik tabStrip を含むビューに渡すユーザー アクセス レベルに応じて、タブを表示/非表示にしようとしています。

@{  Html.Telerik().TabStrip()
.Name("Main_Tabstrip")
.Items(tabstrip =>
{
    tabstrip.Add()
        .Visible((int)ViewData["UserLevel"] < 2)
        .Text("Topic A")
        .LoadContentFrom("_TopicATab", "TopicA");
    tabstrip.Add()
        .Visible((int)ViewData["UserLevel"] < 2)
        .Text("Topic B")
        .LoadContentFrom("_TopicBTab", "TopicB");
    tabstrip.Add()
        .Visible((int)ViewData["UserLevel"] < 2)
        .Text("Topic C")
        .LoadContentFrom("_TopicCTab", "TopicC");
})

ただし、ユーザー ステータスの変更後にビューを生成するアクションを呼び出すと、ビューが更新されているように見えますが (ステップスルーして UserLevel の変更を確認できます)、タブの可視性はビューの最初のレンダリング時のままです。 .

その後、ブラウザーまたは JavaScript の location.reload() 呼び出しを介してページを更新すると、タブの表示は正常に機能します。

追加情報: 上記のアクションは、View() を呼び出して、上記のビューを含むページ全体をレンダリングします。

今回は JavaScript でページをリロードすることで問題を回避できましたが、なぜこれが必要なのかを知りたいので、提案や解決策を教えていただければ幸いです。

4

1 に答える 1

1

(コメントするには長すぎるため、これを回答として投稿しています。)

すみません、もっと具体的に書くべきでした。ページのどこからアクションを呼び出しているのですか?

アクションは、ブラウザーに返される (ビューから生成された) html を返し、アクションが呼び出された方法に応じて、次の 2 つのいずれかが発生します。

(1) ページ全体が置き換えられます (および、ブラウザーは要求動詞によって表示されるアドレスを変更する場合があります)。

(2) ページの一部、たとえば の内容divが差し替えられている。

(1) を達成するには、おそらく への呼び出しHtml.ActionLinkまたは昔ながらのアンカー タグを使用します。ただし、より良いUXを提供できるため、代わりに(2)を使用することをお勧めしますが、実行するのは難しいです. jQuery の ajax メソッドまたは呼び出しを介して、Ajax 呼び出しを行いAjax.ActionLinkます。

つまり、基本的に私の反対質問は、あなたがこれらのどれを使用しているかについてでした. 私の疑いは、あなたがアクションを要求しているが、応答をどこにも書いていないということです。アクションと残りのビューのコードを表示するか、最小限の例に減らしてここに貼り付けることはできますか?

しかし、あなたの質問の要点として、私は少し見回しましたが、javascript を使用したタブの表示/非表示は、そのままではサポートされていないということは正しいです。ただし、http ://www.aspnetwiki.com/page:extending-the-telerik-mvc-client-api http://www.aspnetwiki.com/telerik-mvc:dynamically 役立つ可能性のあるこれらの 2 つの投稿を見つけました -タブストリップにタブを追加

于 2013-07-29T20:04:44.543 に答える