SO

2015-05-20 31 views
11

ile benzer şekilde URL yeniden yazmayı nasıl uygulayacağım Asp.net MVC sitemde SO benzeri işlevler kullanmalıyım.SO

Örneğin kullanıcı url ve url ile birleştirilmiş konu satırı yükledikten sonra https://stackoverflow.com/questions/xxxxxxxx

gittiğinizde bu https://stackoverflow.com/questions/xxxxxxxx/rails-sql-search-through-has-one-relationship

Üstü "/ gibi olur raylar-sql-arama-through-has-bir- ilişki "bölümü url'ye eklenir.

Web formlarında basittir, sadece URL'yi yeniden yazabilirim. Ama MVC

içinde bunu nasıl emin aşağıdaki satırı Global.asax dan oradan getirir böylece

 routes.MapRoute(
      "Default", // Route name 
      "{controller}/{action}/{id}", // URL with parameters 
      new { controller = "Account", action = "LogOn", id = UrlParameter.Optional } // Parameter defaults 
     ); 

Ben bitiştirmek gerekir dize benim veritabanında olduğunu dosyası edilir. Bunu nasıl başarabilirim?

+6

Buna "sümük" denir. [Bu blogu bakın] (http://haacked.com/archive/2010/02/21/manipulating-action-method-parameters.aspx/) bir eylem filtresi –

+0

@StephenMuecke teşekkürler kullanarak bir örnek için teşekkürler. cevap verebilir misin – Alex

+1

Geç - yarına kadar beklemek zorunda kalacak :) –

cevap

8

:

routes.MapRoute(
    "Question", 
    "questions/{id}/{title}", 
    new { controller = "Question", action = "Details" }); 

hile bağlantıları oluştururken sonunda "sümüklüböcek" ekleyin: Kolayca gibi bir şey ile yapabilirsiniz. Bunu yapmanın bir yolu, bir isteğe bağlı slug parametresi olan bir yol tanımlamak ve kontrol yöntemi kontrol parametresi

(bir kimlik her zaman sağlanacak kabul) QuestionController içinde

routes.MapRoute(
    name: "Question", 
    url: "Question/{id}/{slug}", 
    defaults: new { controller = "Question", action = "Details", slug = UrlParameter.Optional } 
); 

sonra verildiyse

public ActionResult Details (int id, string slug) 
{ 
    if (string.IsNullOrEmpty(slug)) 
    { 
     // Look up the slug in the database based on the id, but for testing 
     slug = "this-is-a-slug"; 
     return RedirectToAction("Details", new { id = id, slug = slug }); 
    } 
    var model = db.Questions.Find(id); 
    return View(model); 
} 
+0

'u sorduğum için bu URL'yi iletiyorum: http: // localhost: 58988/question/1/aa-aa ve bana kaynak bulunamadı sayfası veriyor. neden olduğunu biliyor musun? – Alex

+0

, eşleşme noktasını – Alex

+0

ve http: // localhost: 58988/question/0/fawad öğelerine giderken başlattığımda MapRoute işlevinin vurulmuyor. "Görünüm 'hata" ya da yöneticisi bulunamadı veya arama motoru aranan yerleri desteklemiyor diyor. Aşağıdaki konumlarda arandı: " – Alex

3

Özel bir rota arıyorsunuz. Yakından bakarsanız, SO URL'nin metin kısmı ile ilgilenmez. Dolayısıyla, her ikisi de işe yarayacaktır. ( ) Bu sümüklü böcek rota denir

@Html.RouteLink(
    "Read more.", 
    "Question", 
    new { id = question.Id, title = Slugger.ToUrl(question.Title) }) 
+0

unutma. Başvurumda iki farklı yolu nasıl kaydedebilirim? – Alex

+0

Takip ettiğimden emin değilim, isimler benzersiz olduğu sürece birden fazla rota kaydedebilirsiniz – beautifulcoder

+0

Tamam, bilgi için teşekkürler. Tam olarak – Alex

İlgili konular