Hier ist, was Sie tun möchten, zuerst Ihre Routenkarte definieren:
routes.MapRoute(
"Users",
"{username}",
new { controller = "User", action="index", username=""});
Was Sie ist Setup zu tun, erlaubt die folgende Konvention:
- Controller: Benutzer (die Usercontroller-Typ)
- Aktion: Index (dies den Index Methode der Usercontroller abgebildet wird)
- Nickname: Dies ist der Parameter für die Methode Index
Also, wenn Sie fordern die URL http://mydomain.com/javier dies für UserController.Index (string username) auf den Aufruf übersetzt werden wo Benutzername auf den Wert von javier gesetzt .
Nun, da Sie über die Verwendung der MembershipProvider Klassen planen, möchten Sie etwas mehr wie folgt aus:
public ActionResult Index(MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.UserName;
return View();
}
Um dies zu tun, müssen Sie eine Modelbinder verwenden, um die Arbeit von zu tun, gut, Bindung von einem Benutzernamen zu einem MembershipUser-Typ. Dazu müssen Sie einen eigenen ModelBinder-Typ erstellen und auf den Benutzerparameter der Index-Methode anwenden. Ihre Klasse kann wie folgt aussehen:
public class UserBinder : IModelBinder
{
public ModelBinderResult BindModel(ModelBindingContext bindingContext)
{
var request = bindingContext.HttpContext.Request;
var username = request["username"];
MembershipUser user = Membership.GetUser(username);
return new ModelBinderResult(user);
}
}
Auf diese Weise können Sie die Erklärung des Index-Methode ändern sein:
public ActionResult Index([ModelBinder(typeof(UserBinder))]
MembershipUser usr)
{
ViewData["Welcome"] = "Viewing " + usr.Username;
return View();
}
Wie Sie sehen können, haben wir angelegte [Modelbinder (typeof (UserBinder))] Attribut zum Parameter der Methode. Das heißt, bevor Ihre Methode aufgerufen wird, wird die Logik Ihres UserBinder-Typs aufgerufen. Wenn die Methode aufgerufen wird, verfügen Sie über eine gültige Instanz Ihres MembershipUser-Typs.
Dies wurde in neueren Versionen von MVC geändert, sollte jetzt sein: object BindModel (ControllerContext controllerContext, ModelBindingContext bindingContext) – Keith
Ich erhalte null Benutzernamen in The Model Binder Warum? –
@Keith Alles funktioniert gut, aber URL-Routing funktioniert nicht –