ルートテーブルを定義するときに引数をコントローラに渡す方法はありますか?カスタム引数をmvc3のコントローラに渡す
したがって、同じコントローラを2つ以上の「セクション」に使用することができます。
http://site.com/BizContacts // internal catid = 1 defined in the route
http://site.com/HomeContacts // internal catid = 3
http://site.com/OtherContacts // internal catid = 4
とコントローラが表示されますindexアクション上記の例で
ように、追加のパラメータによってデータをフィルタリングして表示するルートテーブルで定義されたカスタムの引数を取得し、データがあろう示します私は、これは任意の助けが高く評価され
やや明らかであると思います
select * from contacts where cat_id = {argument} // 1 or 3 or 4
などのクエリによって返されますか? global.asax
にApplication_Start
に登録することができ
public class MyRoute : Route
{
private readonly Dictionary<string, string> _slugs;
public MyRoute(IDictionary<string, string> slugs)
: base(
"{slug}",
new RouteValueDictionary(new
{
controller = "categories", action = "index"
}),
new RouteValueDictionary(GetDefaults(slugs)),
new MvcRouteHandler()
)
{
_slugs = new Dictionary<string, string>(
slugs,
StringComparer.OrdinalIgnoreCase
);
}
private static object GetDefaults(IDictionary<string, string> slugs)
{
return new { slug = string.Join("|", slugs.Keys) };
}
public override RouteData GetRouteData(HttpContextBase httpContext)
{
var rd = base.GetRouteData(httpContext);
if (rd == null)
{
return null;
}
var slug = rd.Values["slug"] as string;
if (!string.IsNullOrEmpty(slug))
{
string id;
if (_slugs.TryGetValue(slug, out id))
{
rd.Values["id"] = id;
}
}
return rd;
}
}
:
カテゴリ名が一意になる場合は、フィルタとして使用しないでください。 –