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 🙁

Schreibe einen Kommentar