1

ページが最初にレンダリングされるときにデフォルトで HTML.ActionLink を非表示にしてから、ユーザーがいるページに基づいてその可視性を制御しようとしています。助言がありますか?ありがとう!

4

7 に答える 7

3

html 属性を設定することで、アクション リンクに任意のスタイルを設定できます。

Html.ActionLink(
    "LinkName", 
    "Action", 
    null,
    new { @style = "display:none" });
于 2009-11-05T17:06:50.880 に答える
1

リンクを非表示または表示する天気を決定するには、ModelまたはViewDataを介してこの情報を提供する必要があります。マスターページにリンクがあると思います。

したがって、最初のステップは、サイトのすべてのビューにその情報を提供することです。これを行うには、ベースコントローラーを作成し、メソッドをオーバーライドします(もちろん、すべてのコントローラーは新しいコントローラーから継承する必要があります)。

protected override void OnActionExecuted(ActionExecutedContext filterContext)
{
    if (filterContext.ActionResult is ViewResult) {
        ViewData["Shared-ShowTheLink"] = IsLinkeVisible(filterContext) ? "non-null" : null;
    }       
}

private bool IsLinkeVisible(ActionExecutedContext filterContext) {
    // Show on the home page only, for example
    var controllerName = filterContext.RouteData.Values["controller"];
    var actionName = filterContext.RouteData.Values["action"];

    var isHome = string.Compare(controllerName, "Home", StringComparison.InvariantCultureIgnoreCase) == 0;
    var isIndex = string.Compare(actionName, "Index", StringComparison.InvariantCultureIgnoreCase) == 0;
    return isHome && isIndex;
}

その後、マスターページ(またはビュー)に移動して、次のようなことを行う必要があります(WebFormsビューエンジンを想定)。

<% if (ViewData["Shared-ShowTheLink"] != null) { %>
    Html.ActionLink("Link Text", "Action", "Controller");
<% } %>

これで、リンクはホーム/インデックスにのみ表示されます。
これを変更するには、必要に応じてIsLinkeVisibleメソッドを変更します。

乾杯。

于 2009-11-05T22:48:41.237 に答える
0

テクニックは次のとおりです。

  • リンクにCSSクラスを追加します
  • すべてのページのbodyタグにCSSクラスを追加し、必要な数の一意の値を使用します
  • CSSファイルを編集して、bodyタグクラスとリンク上のクラスの組み合わせに基づいてリンクを表示/非表示にします。

CSSファイルの例:

body.events .myLink,
body.about .myLink {
   display:none;
}
body.programs .myLink {
   display:inline;
}

そうすれば、ActionLinkでファンキーなことをする必要はありません。これは、そもそも表示したくないリンクを発行している理由の問題には対処していませんが、それには十分な理由があると思います。

于 2009-11-05T21:20:57.887 に答える
0

機能した唯一のことは、ActionLink をスパンでラップし、クラスを割り当て、CSS で非表示にし、JavaScript で表示することです。何らかの理由で、クラス名を ActionLink に直接割り当てても機能しませんでした。

みんなの助けに感謝します!

于 2009-11-05T19:17:36.040 に答える
0

デフォルトでは、CSSdisplay:none属性を使用してリンクをレンダリングします。次に、Javascript を使用しdisplayて、必要に応じてリンクを表示する値に切り替えます。詳細はこちら

jQuery は、1 つまたは複数の要素の可視性を簡単に切り替えることができるshow() および hide()効果を提供します。

于 2009-11-05T17:05:19.527 に答える
0

htmlAttributes オーバーロードを使用してアクション リンク ヘルパーを作成し、クラスを指定します。

Html.ActionLink("link","link",null, new { @class=model.mystatus })

モデルのプロパティから @class 値を設定してから、「display:none;」を適用します。CSS のクラスに追加するか、要素を jquery --> $('.statusclass').hide(); で非表示に設定します。

于 2009-11-05T17:08:28.490 に答える
0

Html.ActionLink ヘルパー メソッドによって生成されたタグの可視性を制御したいのですね。はいの場合、次のようにタグのクラスを動的に指定できます。

<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%>

コントローラーのアクション メソッドViewData["actionLinkClass"]で、表示スタイルまたは非表示スタイルの値を定義できます。

于 2009-11-05T17:13:25.183 に答える