MVC控制器没有被击中

时间:2011-03-11 06:38:19

标签: jquery asp.net asp.net-mvc

单击“详细信息视图”选项卡或任何选项卡时,我无法获取我的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>

2 个答案:

答案 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 标记。