Pracujem na aplikácii MVC3.
Podľa môjho názoru používam @ Html.ActionLink na kotviace odkazy. Každá vec funguje dobre. Tieto odkazy však zahŕňajú do odkazu aj parametre aktuálnej adresy URL.
Ak je môj aktuálny odkaz http://localhost:25466/Blog/all/2
Vytvára sa akčný odkaz http://localhost:25466/Blog/Blog/shoes/2
Vo vyššie uvedenom odkaze vlastne nerobím nič, aby som do adresy URL zahrnul „2“. Ale stále sa pridáva.
Moja konfigurácia trasy je
routes.MapRoute(
"Blog", "Blog/Blog/{tag}/{id}",
new { controller = "Blog", action = "Blog", tag = UrlParameter.Optional,id="1" }
);
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = "1" },
constraints: new { id = @"d+" }
);
A moje činy sú
public ActionResult All(int id)
{
var context = new BlogCore.DbContext.BlogContext();
var list = context.Get(id,20);
return View(list);
}
public ActionResult Blog(string tag,int id)
{
var context = new BlogCore.DbContext.BlogContext();
var list = context.Get(HttpUtility.UrlEncode(tag), id, 20);
return View("All", list);
}
A takto používam actionlink na vygenerovanie kotviaceho odkazu
@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName }, null)
Ako sa môžem vyhnúť 2 v akčnom odkaze.
Vopred ďakujem.
odpovede:
1 pre odpoveď č. 1Myslím, že musíte tento parameter výslovne nastaviť, napríklad:
@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = 1 }, null)
Verím, že pri vytváraní odkazu na ActionLink sa berie do úvahy skutočný slovník zobrazenia.
1 pre odpoveď č. 2
MVC použije akékoľvek premenné z aktuálnehoreťazec dotazov pri hľadaní cesty na generovanie adresy URL. Bude teda zahrnutá vaša premenná id. Aby ste tomu zabránili, musíte v smerovaných údajoch, ktoré odovzdáte pomocníkovi ActionLink, explicitne nastaviť id na hodnotu null:
@Html.ActionLink(blog.PostTitle, "Blog", "Blog", new { tag = blog.PostRewriteName, id = null }, null)