2013-05-15 3 views
0

J'ai ActionResult que regarder ceci:Comment puis-je avoir un routage comme ce contrôleur/action/id/string dans ASP.NET MVC

public ActionResult Comment(int id) 
{ 
    var news = re.GetNewsByID(id); 
    NewsViewModel model = new NewsViewModel(); 

    model.Description = news.Description; 
    model.Imageurl = news.Image; 
    model.link = news.Link; 
    model.PubDate = news.Date; 
    model.Title = news.Title; 

    return View(model); 
} 

et à l'intérieur de la vue, je l'ai déclaré:

@Html.ActionLink("Comment", "Comment", new { id = item.Title }) 

Lorsque je clique sur le ActionLink je reçois à l'adresse suivante:

Home/Comment/403 

Mais je veux que ça finisse avec le item.title.

Quelque chose comme ceci:

Home/Comment/403/What-ever-the-item-title-contains 

Comment puis-je y parvenir?

Répondre

1

Je 1ère carte cette route dans mon itinéraire Collection:

routes.MapRoute(
    name: "Title", 
    url: "{controller}/{action}/{id}/{title}", 
    defaults: new { controller = "Home", action = "Index", id = 0, title = UrlParameter.Optional } 
     ); 

Assurez-vous que cet itinéraire dans cartographié sous votre route par défaut. Une fois que vous avez ce alors le faire:

@Html.ActionLink("Comment", "Comment", new { id = item.Id, title = item.Title }) 

Pour cette question, vous pourriez vouloir faire ressembler votre route par défaut comme la route que je fait ci-dessus. Il n'y a pas besoin de 2 routes car l'ID et le titre sont optionnels.

+1

Il faut être prudent avec plusieurs paramètres de routage optionnels car cela peut conduire à des choses sournoises -http: //haacked.com/archive/2011/02/20/routing-regression-with-two-consecutive-optional-url -parameters.aspx Si les deux paramètres sont nécessaires pour cette route, ne les marquez pas en option – Tommy

+1

Hmmm n'était pas au courant de ce bug/problème. Merci pour le lien Tommy. Je pense toujours que dans le cas de Juliano, il a besoin d'une deuxième route qui a un paramètre id qui n'est pas optionnel mais un paramètre de titre qui est optionnel car avoir un titre n'a aucun sens sans avoir un identifiant d'article. Cela résout le problème avec le bug et résout son problème. En passant, ce bug est-il encore un problème dans MVC 4? – Marko

+0

@Marko, Une question, si un article a le même titre mais un identifiant différent. cela va-t-il mener à des choses changeantes? – Obsivus

0

Je ne savais pas comment le faire de Html.ActionLink, j'ai toujours utilisé Url.Action comme ceci:

<a href="@Url.Action("Comment", new { id = item.Title })/@theTermToAddHere">Comment</a> 

Notez le «/» dans le href est le balisage (pas une partie du code de rasoir), et alors j'ajoute le terme supplémentaire.