Динамический именованный параметр в коллекции значений маршрута с использованием представления Razor - PullRequest
1 голос
/ 01 марта 2012

Я использую вспомогательный метод для создания разделов в моем представлении:

@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

City или все, что я передаю в качестве параметра вместо sectionName, потому что "City" - это значение параметра sectionName Я передаю вспомогательному методу.

Я мог бы переключиться на sectionName, но мне просто интересно, есть ли более аккуратный способ добиться этого.

1 Ответ

5 голосов
/ 01 марта 2012

Вы не показали, как выглядит пользовательский помощник 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 из вашей модели.

...