MVC Url.Action ведет себя по-разному на разных страницах

Я видел интересное поведение asp .net "Url.Action".

Ссылка как <a href="@Url.Action("Index", "Soru")" >@baslik</a> кажется в клиентском браузере как <a href="/Soru/Index">denemebaslik</a>Затем пользователь нажимает эту ссылку и переходит на целевую страницу.

На этой целевой странице есть ссылка <a href="@Url.Action("Index", "Soru")" >@baslik</a> кажется в клиентском браузере как <a href="/Soru/Index/29271654-e19a-4096-8795-3283d8a208ed">denemebaslik</a>

@Url.Action ведет себя по-разному на разных страницах. Мой конфиг маршрута похож

routes.MapRoute(
            name: "Default",
            url: "{controller}/{action}/{*id}",
            defaults: new { controller = "Giris", action = "Index", id = UrlParameter.Optional }
        );

Почему это так красиво?

1 ответ

Решение

MVC подберет параметры в строке запроса текущей страницы и включит их при отображении ссылки на тот же маршрут, в основном сохраняя существующие параметры.

Если это сценарий, который вы испытываете - это по замыслу. Это означает, что для ситуаций, когда ссылка действия указывает на саму страницу, параметры уже доступны для вас. Например, если у вас есть ссылки "сортировать по возрастанию / убыванию", другие параметры (например, цена / описание) будут по-прежнему включаться в ссылки без необходимости каждый раз кодировать их.

Если вам не нужны дополнительные параметры, укажите параметр с пустой строкой, например

<a href="@Url.Action("Index", "Soru", new { id = "" })">@baslik</a>

Обратите внимание, что вы не можете назначить null к параметру, потому что это анонимный тип. Пустые строки работают просто отлично.

Кстати, я уверен, что вы это знаете, но вы также можете использовать более удобный @Html.ActionLink тоже:

@Html.ActionLink(baslik, "Index", "Soru", new { id = "" })">

Надеюсь, это поможет вам.

Другие вопросы по тегам