ページが最初にレンダリングされるときにデフォルトで HTML.ActionLink を非表示にしてから、ユーザーがいるページに基づいてその可視性を制御しようとしています。助言がありますか?ありがとう!
7 に答える
html 属性を設定することで、アクション リンクに任意のスタイルを設定できます。
Html.ActionLink(
"LinkName",
"Action",
null,
new { @style = "display:none" });
リンクを非表示または表示する天気を決定するには、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メソッドを変更します。
乾杯。
テクニックは次のとおりです。
- リンクにCSSクラスを追加します
- すべてのページのbodyタグにCSSクラスを追加し、必要な数の一意の値を使用します
- CSSファイルを編集して、bodyタグクラスとリンク上のクラスの組み合わせに基づいてリンクを表示/非表示にします。
CSSファイルの例:
body.events .myLink,
body.about .myLink {
display:none;
}
body.programs .myLink {
display:inline;
}
そうすれば、ActionLinkでファンキーなことをする必要はありません。これは、そもそも表示したくないリンクを発行している理由の問題には対処していませんが、それには十分な理由があると思います。
機能した唯一のことは、ActionLink をスパンでラップし、クラスを割り当て、CSS で非表示にし、JavaScript で表示することです。何らかの理由で、クラス名を ActionLink に直接割り当てても機能しませんでした。
みんなの助けに感謝します!
htmlAttributes オーバーロードを使用してアクション リンク ヘルパーを作成し、クラスを指定します。
Html.ActionLink("link","link",null, new { @class=model.mystatus })
モデルのプロパティから @class 値を設定してから、「display:none;」を適用します。CSS のクラスに追加するか、要素を jquery --> $('.statusclass').hide(); で非表示に設定します。
Html.ActionLink ヘルパー メソッドによって生成されたタグの可視性を制御したいのですね。はいの場合、次のようにタグのクラスを動的に指定できます。
<%=Html.ActionLink("link", "MyAction", null, new { @class = ViewData["actionLinkClass"] })%>
コントローラーのアクション メソッドViewData["actionLinkClass"]
で、表示スタイルまたは非表示スタイルの値を定義できます。