ASP.net MVC site.master ссылка с использованием HTML.ActionLink - PullRequest
2 голосов
/ 29 июня 2009

У меня есть следующий код в моем site.master для меню:

<ul id="menu">              
    <li><%= Html.ActionLink("My Contact Info", "DetailsbyUserName/" + Html.Encode(Page.User.Identity.Name), "Users")%></li>
</ul>

При наведении курсора на URL-адрес я вижу, что он указывает на:

http://site/Users/DetailbyUserName/[name]

что правильно.

Проблема в том, что когда я ставлю точку останова в классе контроллера Users ниже:

public ActionResult DetailsbyUserName(string loginName)
{
    UserInfo user = repo.GetUserByName(loginName);
    return View(user);
}

похоже, что параметр loginName всегда равен null.

Есть предложения?

Ответы [ 2 ]

3 голосов
/ 29 июня 2009

Проблема в том, что у вас не настроен маршрут для указания параметра с именем loginName.

Я предполагаю, что ваш Маршрут по умолчанию поглощает ваш запрос и пытается присвоить значение [name] параметру с именем "id". Если вы измените имя параметра на «id» с «loginName», держу пари, он будет работать для вас.

Помните, что механизм маршрутизации сопоставляет каждый сегмент URL с именованным параметром. Маршрут по умолчанию выглядит следующим образом: "{controller}/{action}/{id}". Если вы хотите иметь параметр с именем «loginName», вам нужно будет найти маршрут с сегментами "{controller}/{action}/{loginName}", который отличается от маршрута по умолчанию, чтобы маршрут по умолчанию не совпадал с ним первым. 1007 *

0 голосов
/ 29 июня 2009

попробовать:

Html.ActionLink("My Contact Info", "DetailsbyUserName", "Users", new { loginName = Html.Encode(Page.User.Identity.Name), null);

если ваш контроллер выглядит примерно так:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

Полагаю, вам нужно использовать новый {veryVeryLongParameterName = "YourParamValue"} в параметре ActionVink routeValues.

А также, для этого вам нужен маршрут.

Я тоже новичок в этом, по крайней мере, это то, что я понял о ActionLinks, надеюсь, кто-то сможет объяснить это лучше.

...