1

ヘルパー メソッドを使用して、ビューにセクションを作成します。

@helper CreateFacetSection(WebViewPage page, string sectionName,
                           List<FacetValue> model)
{
     var showMore = int.Parse(WebConfigurationManager.AppSettings["ShowMore"]);

     <section id="@sectionName">

     <h4>@sectionName</h4>

        <ul>
            @for (int i = 0; i < model.Count(); i++)
            {
                if (i >= showMore)
                {
                    @:<li class="hide">
                }
                else
                {
                    @:<li>
                }

                FacetValue fv = model.ElementAt(i);

                @page.Html.ActionLinkWithQueryString(fv.Range, "Search",
                                              new { sectionName = fv.Range }, null);

                @:(@fv.Count)

                @:</li >
            }
        </ul>   

        @if(model.Count > showMore)
        {
            <a href="#" class="show-more" data-section="@sectionName">
            @Localization.ShowMore &#9660;</a>
        }   

     </section>
}

ここで、上記のヘルパーでこのカスタム@Html.ActionLinkヘルパーを使用しているとします。

 @Html.ActionLinkWithQueryString(fv.Range, "Search", new { sectionName = fv.Range });

ルート値コレクションで動的な名前付きパラメーターを渡す方法はありますか? sectionName上記の場合、アクション メソッドでバインドされた正しい値を取得できるように、パラメーターに動的に名前を付けたいと思います。sectionName現在ヘルパーメソッドにパラメーターとして渡しているものによって異なります...

現在、次のようなリンクを取得しています。

http://leniel-pc:8083/realty/search?sectionName=Volta%20Redonda

そのはず:

http://leniel-pc:8083/realty/search?City=Volta%20Redonda

CitysectionNameまたは、「City」がsectionNameヘルパーメソッドに渡すパラメーターの値であるためではなく、パラメーターとして渡すものは何でも。

切り替えることもできますが、sectionNameこれを実現するためのより良い方法があるかどうか疑問に思っています。

4

2 に答える 2

6

ActionLinkWithQueryStringカスタム ヘルパーがどのように見えるかは示していませんRouteValueDictionaryが、無名オブジェクトの代わりに を受け取るオーバーロードを追加できます。そして、それは簡単です:

var values = new RouteValueDictionary();
values["somedynamicname"] = "some dynamic value";
values["someotherdynamicname"] = "some other dynamic value";

その後:

@Html.ActionLinkWithQueryString(fv.Range, "Search", values);

ActionLinkこれは内部で使用する拡張メソッドだとおっしゃっていたので、無名オブジェクトの代わりにルートパラメータとしてActionLink取るオーバーロードがあります。RouteValueDictionary

を受け取るRouteValueDictionaryコンストラクターがあるIDictionary<string, object>ため、モデルから LINQ を使用して非常に簡単に構築できます。

于 2012-03-01T18:45:30.177 に答える