Frage

Ich habe den folgenden Code in meinem site.master für ein Menü:

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

Wenn ich mit der Maus über die URL fahre, sehe ich, dass sie auf Folgendes verweist:

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

welches ist richtig.

Das Problem ist, dass, wenn ich einen Haltepunkt in das setze Users Controller-Klasse unten:

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

es scheint, dass die loginName Parameter ist immer null.

Irgendwelche Vorschläge?

War es hilfreich?

Lösung

Das Problem ist, dass Sie nicht über eine Strecke einen Parameter namens „loginname“ angeben einzurichten.

Ich vermute, dass Ihre Standardroute Ihre Anfrage schluckt und versucht, den [name] Wert auf einen Parameter namens „id“ zuzuweisen. Wenn Sie den Namen der von „loginname“ auf „id“ Parameter ändern, ich wette, es wird für Sie arbeitet.

Beachten Sie, dass die Routing-Engine jedes URL-Segment zu einem benannten Parameter abbildet. Die Standard-Route wie folgt aussieht: "{controller}/{action}/{id}". Wenn Sie einen Parameter namens „loginname“ haben wollen, müßten Sie mit einer Strecke kommen, die die Segmente "{controller}/{action}/{loginName}" hatten, die von der Standardroute unterschiedlich war, so dass die Standardroute es nicht übereinstimmten ersten.

Andere Tipps

versuchen:

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

Wenn Ihr Controller etwa so aussieht:

public ActionResult DetailsbyUserName(string veryVeryLongParameterName);

Ich denke, Sie müssen new { veryVeryLongParameterName = "YourParamValue" } im routeValues-Parameter von ActionLink verwenden.

Und außerdem braucht man dafür eine Route.

Ich bin auch sehr neu in diesem Bereich, zumindest habe ich das über ActionLinks verstanden, ich hoffe, jemand kann es besser erklären.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top