Wie übergeben Sie zwei Parameter vom view zum controller, aber die Anzeige nur eine url?
Baue ich ein app in MVC 4 und ich bin fest auf eine Sache.
Ich habe einen controller und action:
public ActionResult Details(string pattern, int id)
{
Post post = repository.GetPostById(id);
return View(post);
}
Und in der Ansicht:
<div class="innerbody">
@Model.Description @Html.ActionLink("Czytaj dalej...", "Details", new { id = Model.PostId, pattern = Model.ShortUrl})
</div>
Nun, was ich versuche zu erreichen ist, dass die url wird sein:
www.mysite.com/blog/pattern
Ohne id
. 'Muster' ist ShortUrl
extrahiert aus post-Titel.
Ich habe versucht, indem diese verschiedenen Routen zu RouteConfig:
routes.MapRoute(
name: "Details",
url: "{Controller}/{pattern}",
defaults: new {controller = "Blog", action = "Details", pattern = "", id = UrlParameter.Optional}
);
oder
routes.MapRoute(
name: "Details",
url: "{Controller}/{pattern}",
defaults: new {controller = "Blog", action = "Details", pattern = ""}
);
Aber es hält wirft den Fehler:
Die Parameter-dictionary enthält einen null-Eintrag für den parameter 'id' nicht-nullable-Typ 'System.Int32' für die Methode 'System.Web.Mvc.ActionResult Details(System.String, Int32) - ' in 'MyBlog.Controller.BlogController'. Einen optionalen parameter müssen Sie einen Verweis geben, eine nullable-Typ, oder erklärt werden als optionale parameter.
Ich glaube, ich kann nicht fangen diese "routing" - Ding... Wie konnte ich diese Aufgabe?
- Wie viele Strecken hast du in deiner global.asax?
- Routen sind in der separaten Datei RouteConfig.cs und es wird nur die Standard-route auf den moment. Ich versuche, um Sekunde.
- Versuchen Sie einfach, bis Sie Ihre default-route unter Ihrem neuen route. und lassen Sie mich wissen, wenn Ihr noch was problem.
- Yup, das ist das, was ich zuerst versucht, aber leider ist es fehlgeschlagen.
- Legen Sie einen Standardwert für eine id wie
int id = 0
Meisten Datenbanken starten Sie Ihren index auf 1, also 0 sollte relativ sicher sein. - So jetzt bin ich immer: die Sequenz enthält keine Elemente aus "Post = repository.GetPostById(id);" denn es ist die übergabe null zu 🙁
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wenn Sie einfach nicht wollen, die
id
angezeigt in der URL, aber nicht, um es zu senden, um die Aktion, dann die einfachste Sache zu tun wäre, umPOST
es, entweder mit einer form oder ajax.ODER
Entweder Ihre Routen sollten in Ordnung sein, dann, wenn es keinen Punkt in Erwähnung
id
in jedem von Ihnen, wenn Sie nicht möchten, extrahieren Sie es aus der URL.Zugegeben, es ist merkwürdig, zu verwenden
POST
für ein Szenario, das für einGET
aber in einemGET
können Sie nur senden, Informationen über die URL, ich.e route-Werten und den querystring. Mit einemPOST
können Sie schicken Sie es in die Formular-Sammlung, die ist nicht in der URL offensichtlich, aber MVC wird prüfen, Ihre Werte für Modell verbindlich, das können Sie immer noch erhalten, dieid
als action-parameter der Methode.