单击“详细信息视图”选项卡或任何选项卡时,我无法获取我的Controller操作方法。但是,如果我在javascript部分中注释return false;
,我可以获取操作方法,但是我的“已选择”标签不会被维护。
<script type="text/javascript">
$(document).ready(function () {
$('.test').click(function () {
$('.test').removeClass('selected');
$(this).addClass('selected');
return false;
});
});
</script>
<div id="tabs" class="shadetabs">
<ul>
<li class="test selected">@Html.ActionLink("Overview", "Index", "Statistics")</li>
<li class="test">@Html.ActionLink("Detail View", "Detail", "Statistics")</li>
<li class="test">@Html.ActionLink("Trends", "Trends", "Statistics")</li>
</ul>
</div>
答案 0 :(得分:2)
通过返回false,您将取消默认链接操作,即向控制器操作发送请求。因此,如果您这样做,您将需要手动发送请求(AJAX?)并使用此请求的结果来修改DOM。例如:
$('.test').click(function () {
$('.test').removeClass('selected');
$(this).addClass('selected');
$.ajax({
url: this.href,
success: function(result) {
// TODO: do something with the result here
}
});
return false;
});
或者您可以在没有任何JavaScript的情况下执行此操作。
例如,您可以编写一个custom HTML helper来生成此菜单:
public static MvcHtmlString MenuLink(
this HtmlHelper htmlHelper,
string linkText,
string actionName,
string controllerName
)
{
var routeData = htmlHelper.ViewContext.RouteData;
string currentAction = routeData.GetRequiredString("action");
string currentController = routeData.GetRequiredString("controller");
if (actionName == currentAction && controllerName == currentController)
{
return htmlHelper.ActionLink(
linkText,
actionName,
controllerName,
null,
new {
@class = "selected"
}
);
}
return htmlHelper.ActionLink(linkText, actionName, controllerName);
}
然后简单地说:
<ul>
<li>@Html.MenuLink("Overview", "Index", "Statistics")</li>
<li>@Html.MenuLink("Detail View", "Detail", "Statistics")</li>
<li>@Html.MenuLink("Trends", "Trends", "Statistics")</li>
</ul>
答案 1 :(得分:0)
代码很好。但我认为尝试使用唯一ID li 标记。