2010-12-16 4 views
1

ビュー内のルート値を検出することはできますか?ビュー内のルート値を検出する

/pages/create/1などあり、1があるかどうか確認したいですか?

基本的には、私が達成しようとしていることについてはこれがおそらく最良の方法ではないと確信していますが、この値に基づいて別の部分的なビューをレンダリングしたいと思います。

上記の代わりに、私のコントローラ内からの値に基づいてビュー内の部分表示がレンダリングされるように変更することは可能ですか?

答えて

1

RouteDataオブジェクトはViewPage.ViewContext.RouteDataで検査できます。そして、あなたがあなたの代わりに、コントローラでこれらの値を検査することが判明した場合、あなたはControllerBase.ControllerContext.RouteDataを使用してそれらにアクセスすることができ

string areaname = routeData.Values["area"] as string; 
string controllername = routeData.Values["controller"] as string; 
string actionname = routeData.Values["action"] as string; 
string id = routeData.Values["id"] as string; 

のようなものを使用して値を確認してください。似た何かがアクションフィルタなど

1

他の回答が正しいのために適用されますが、私はあなたの最後の文に対処しようと思いました。私がするためにそれが可能である代わりに、上記で行うので、サイドノートでは

を私のコントローラ内からの値に基づいて、ビュー内でレンダリングされる部分ビューを変更することはできますか?

まあ部分図の次のコードを使用して(、JavaScriptから呼び出して、DOMに直接結合しない限り)ビュー自体でレンダリングされています

<%: Html.RenderPartial("SomePartial") %> 

そう防ぐために、「コードのスープ」(if文)でビューの

public static string RenderCustomPartial(this HtmlHelper helper, RouteData rd) 
{ 
    string partialName; 

    if (rd.Values["SomeParam"] == 1) 
    partialName = "PartialOneName"; 
    else 
    partialName = "PartialTwoName"; 

    return helper.RenderPartial(partialName); 
} 

そして:

ビュー、あなたはViewContextを検査した後れるrenderPartialして呼び出すHTMLヘルパーを使用します

上記のように、拡張機能のルートデータに直接アクセスしたり、部分的にバインドするモデルを渡したりするなど、いくつかの改造を行うことができます。

また、上記のIF文をコントローラで実行し、ViewDataに部分的なビュー名を埋め込んだり、Viewの通常のRenderPartial呼び出しでそれを使用することもできます。

あなたのボートは何でも浮かびます。 :)

関連する問題