Почему это меню панели навигации, использующее @ Html.ActionLink в приложении .NET, не работает, как я ожидал? - PullRequest
0 голосов
/ 23 октября 2018

Я не очень в .NET , и у меня есть следующая проблема.На страницу у меня есть меню навигационной панели BootStrap, подобное этому:

<nav class="navbar navbar-expand-lg navbar-dark bg-primary">

    @Html.ActionLink("Vidly_v2", "Index", "Home", new { area = "" }, new { @class = "navbar-brand" })
    <button class="navbar-toggler" type="button" data-toggle="collapse" data-target="#navbarColor01" aria-controls="navbarColor01" aria-expanded="false" aria-label="Toggle navigation">
        <span class="navbar-toggler-icon"></span>
    </button>
    <div class="collapse navbar-collapse" id="navbarColor01">
        <ul class="navbar-nav mr-auto">
            <li class="nav-item active">@Html.ActionLink("Home", "Index", "Home", new { @class = "nav-link" })</li>
            <li>@Html.ActionLink("Customers", "Index", "Customers", new { @class = "nav-link" })</li>
            <li>@Html.ActionLink("Movies", "Index", "Movies", new { @class = "nav-link" })</li>
        </ul>
        @Html.Partial("_LoginPartial")
        <form class="form-inline my-2 my-lg-0">
            <input class="form-control mr-sm-2" placeholder="Search" type="text">
            <button class="btn btn-secondary my-2 my-sm-0" type="submit">Search</button>
        </form>
    </div>
</nav>

У меня есть следующая проблема с этими 3 ссылками:

<li class="nav-item active">@Html.ActionLink("Home", "Index", "Home", new { @class = "nav-link" })</li>
<li>@Html.ActionLink("Customers", "Index", "Customers", new { @class = "nav-link" })</li>
<li>@Html.ActionLink("Movies", "Index", "Movies", new { @class = "nav-link" })</li>

, потому что при нажатии на все эти ссылки пользователь перенаправляетсяна следующие URL-адреса (в том же порядке, что и предыдущий тег :

http://localhost:60048/Movies?Length=4

и

http://localhost:60048/Movies?Length=9

и

http://localhost:60048/Movies?Length=6

Почему? Что не так? Что мне не хватает? Как я могу решить эту проблему?

Ответы [ 2 ]

0 голосов
/ 24 октября 2018

Согласно ActionLink списку вспомогательных перегрузок , вы используете 4 перегрузки:

public static System.Web.Mvc.MvcHtmlString ActionLink (this System.Web.Mvc.HtmlHelper htmlHelper, 
              string linkText, string actionName, object routeValues, object htmlAttributes);

В этом случае имя контроллера обрабатывается как параметр routeValues, которыйстановится причиной, по которой значение параметра Length изменяется для каждой ссылки href ("Home".Length = 4, "Customers".Length = 9 & "Movies".Length = 6).

Вы должны использовать ActionLink помощник с5 перегрузок:

public static System.Web.Mvc.MvcHtmlString ActionLink (this System.Web.Mvc.HtmlHelper htmlHelper, 
              string linkText, string actionName, string controllerName, object routeValues, 
              object htmlAttributes);

путем передачи значения null в параметр routeValues, например:

<li class="nav-item active">@Html.ActionLink("Home", "Index", "Home", null, new { @class = "nav-link" })</li>
<li>@Html.ActionLink("Customers", "Index", "Customers", null, new { @class = "nav-link" })</li>
<li>@Html.ActionLink("Movies", "Index", "Movies", null, new { @class = "nav-link" })</li>
0 голосов
/ 23 октября 2018

Вы используете неправильный вспомогательный метод!.

В настоящее время вы используете приведенную ниже перегрузку ActionLink помощника.

public static MvcHtmlString ActionLink (this HtmlHelper helper, 
                                             string linkText, 
                                             string actionName, 
                                             string controllerName, 
                                             object routeValues);

Последний параметр предназначен для передачи значений маршрута, которыебудет использоваться для построения строки запроса.В настоящее время вы передаете анонимный объект для атрибутов html этому.

Используйте эту перегрузку

public static MvcHtmlString ActionLink (this HtmlHelper htmlHelper, 
                                             string linkText, 
                                             string actionName, 
                                             string controllerName,
                                             object routeValues,
                                             object htmlAttributes);

Если у вас нет значений для передачи, просто передайте null для4 параметра (значения маршрута)

@Html.ActionLink("Movies", "Index", "Movies", null, new { @class = "nav-link" })
...