2009-06-17 21 views
0

私は、データベースから駆動されたオンザフライでいくつかのハイパーリンクを生成します。たとえば、プロジェクトに関するいくつかの情報を取得し、そのDBテーブルの構成情報(生成するHTMLフィールドのタイプなどの情報を含む)に基づいて、MVCで作成したカスタムコントロールから動的にHtmlコントロールを作成します。ヘルパーを使用せずにアクションを指定する方法

これは私にハイパーリンクの考えをもたらします。特定の製品のハイパーリンクを動的に生成する必要がある場合、私のカスタムコントロールで動的に生成されたビューの製品の下のフォームが単純になります。どのようにヘルパーメソッドを使用する予定がなく、(これらのフィールドをビューに動的に作成しているので)これらのインスタンスでコントローラ/アクションを指定するには、Htmlのようなものを使用します。フィールドは実行時に動的に生成されるため、Actionlink?私が使用した

+0

ビューのコード(ここでは「動的に生成される」)をここに投稿できますか? –

+0

私はまだフォームを生成する動的部分をコード化していません。 – PositiveGuy

+0

それは私の頭を打つ私のカスタムコントロールからのHTMLヘルパーの使用せずにTagBuilderを使用していますが、今私はどのようにコントローラ/動作を指している動的にハイパーリンクを構築しようとしている動的にレンダリングできないHtml.ActionLinkを使用するのではなく、というストレートを使用してハイパーリンクに対して動的に生成されるHTMLマークアップです。このハイパーリンクをカスタムコントロールからビューに動的にレンダリングする理由はありません。 – PositiveGuy

答えて

0

一つの解決策は、あなたがして、ヘルパーメソッドに渡すことができ、この情報のすべてが含まれているラッパークラスを作成することです:

public class RouteWrapper 
{ 
    public string RouteName { get; set; } 
    public object RouteValues { get; set; } 
    public string LinkText { get; set; } 
    /* Other Properties pertaining to your data */ 
} 

ラッパーの中で、あなたはRouteNameを定義する方法を持っているでしょう、 RouteValuesプロパティを使用します。また、コントローラーとアクションを変更する必要がある場合は、そのように設定することもできます。ただし、RouteValuesでコントローラーとアクションを渡して、RouteNameとして「Default」を指定することもできます。

あなたはその後、本当にあなたはビューでstraigtを必要とするものを行うことができるだろう(RouteWrapperクラスを想定したモデルで、構文が多少ずれることがありますが、あなたのアイデアを得るでしょう):

<%= Html.RouteLink(Model.LinkText, Model.RouteName, Model.RouteValues) %> 

・ホープこれは役に立ちます。

EDIT:

ちょうど再読み込み、あなたはヘルパーを使用していません見ました。

アンカータグを生成する場所に関係なく、内部HTMLのLinkTextプロパティを使用できます。また、ルート名とルート値に基づいてURLを生成するのに役立つRoutingクラスのメソッドがあります。どうすればいいか分かり次第、コードを少し投稿します。

AGAIN EDIT:

OK、これはアンカータグを生成するための一般的な方法のようになります。

public string GenerateAnchorTag(ViewContext context, RouteWrapper model) 
{ 
    string url = RouteTable.Routes.GetVirtualPath(context, model.RouteName, new RouteValueDictionary(model.RouteValues)); 
    return String.Format("<a href=\"{0}\">{1}</a>", url, model.LinkText); 
} 

私は(あなたがSystem.Web.Routingを含める必要が試してみて、多分なるかですSystem.Web.Mvc)。 コンテキストについては、何らかの理由で要求コンテキストを取得する必要があります。私は通常ヘルパー拡張でこれをやっているので、ヘルパー変数にはすでに渡すことができるコンテキストがあります。ヘルパーを使用していない場合は、メソッドにRequestContextを渡す最善の方法を見つけなければなりません。