/ / Prečo odkazy na moje akčné odkazy vrátane aktuálnych akčných parametrov v MVC3 - asp.net-mvc, asp.net-mvc-3, asp.net-mvc-4, asp.net-mvc-routing, asp.net-mvc-areas

Prečo odkazy môjho pohľadu vrátane aktuálnych akcií paradoxov v MVC3 - asp.net-mvc, asp.net-mvc-3, asp.net-mvc-4, asp.net-mvc-routing, asp.net-mvc-areas

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ď č. 1

Myslí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)