Контроллер MVC не получает удар - PullRequest
0 голосов
/ 11 марта 2011

Я не могу получить метод действия моего контроллера, когда я нажимаю вкладку «Подробный вид» или любую другую вкладку в этом отношении.Однако, я могу заставить метод действия срабатывать, если я закомментирую return false; в разделе javascript, но тогда моя вкладка «Выбранные» не будет поддерживаться.

<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 ]

2 голосов
/ 11 марта 2011

Возвращая 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.

Так, например, вы можете написать пользовательский помощник HTML , который будет генерировать это меню:

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> 
0 голосов
/ 11 марта 2011

Код был хорош. Но я думаю, что попробуйте сделать тег li с уникальным идентификатором.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...