0

これは私が今持っているもので、うまく機能します:

@Html.ActionLink("Home", "Index", "Home", null, (ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home) ? new { @class = "current"} : null)

私がやろうとしているのは、それにIDも与え、条件が偽であってもそのIDを保持することです。だからこのようなもの:

@Html.ActionLink("Home", "Index", "Home", null, (ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home) ? new { @class = "current", id = "Home" } : new { id = "Home" })

onclick()また、クリックをコントローラーに向けるのではなく、機能を設定したい。

4

1 に答える 1

1

AFAIK、@Html.ActionLink()ヘルパーは、コントローラーへのリンクを作成するためだけに作成されています。ただし、onclick()関数を割り当てるという問題には非常に簡単な回避策があります。

例:(私はonclickイベントのjavascript関数を想定しています)

<script type="text/javascript">
  function foo(string){
    alert(string);
    return false; //Very Important
  }
</script>

したがって、ActionLinkに次のように配置できます。

@Html.ActionLink("Home", "", "", null, (ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home) ? new { @class = "current", @id = "Home",onclick="javascript:foo('foo2');" } : new { @id = "Home" })

return falseJS関数の部分に注意してください。ActionLinkをクリックした後にページを更新したくない場合、これは非常に重要です。また、ActionLinkのActionNameとRouteValuesに空の文字列を入力すると、コントローラーの呼び出しが停止します。

IDの質問の最初の部分については、IDの前に@を付けることを忘れないでください。

@Html.ActionLink("Home", "Index", "Home", null, (ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home) ? new { @class = "current", @id = "Home" } : new { @id = "Home" })

したがって、最終的なActionLinkは次のようになります。

@Html.ActionLink("Home", "", "", null, (ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home) ? new { @class = "current", @id = "Home",onclick="javascript:somefunction()" } : new { @id = "Home" })

あなたが指定できるかどうかはわかりませんが: new {@id = "Home"}

したがって、これを回避するには、次のようなものを提案します。

@if(ViewBag.SelectedPage == CurrentPageEnums.SelectedViewEnum.Home)
{
  @Html.ActionLink("Home", "", "", null, new { @class = "current", @id = "Home", onclick="javascript:alert('True');return false;" })
}
else
{
//Not sure what you would like to put in the else clause
@Html.ActionLink("Home", "", "", null, new { @class = "current", @id = "Home", onclick="javascript:alert('False');return false;"})
}
于 2013-03-22T09:13:29.953 に答える