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动态命名的参数,这样我就可以在 action 方法中获得正确的值。它会根据sectionName我当前作为参数传递给辅助方法的不同而有所不同......

现在我得到一个这样的链接:

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

它应该是:

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

City或者我作为参数传递的任何内容,而不是sectionName因为“City”是sectionName我传递给辅助方法的参数的值。

我可以做一个开关,sectionName但我只是想知道是否有一种更简洁的方法来实现这一点。

4

2 回答 2

6

您尚未展示ActionLinkWithQueryString自定义助手的外观,但您可以添加一个重载,它采用 aRouteValueDictionary而不是匿名对象。然后很容易:

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

进而:

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

既然你说这是一个在ActionLink内部使用的扩展方法,那么就有了这种方法的重载,ActionLinkRouteValueDictionary不是匿名对象作为路由参数。

由于RouteValueDictionary有一个构造函数,IDictionary<string, object>它可以很容易地使用模型中的 LINQ 构建它。

于 2012-03-01T18:45:30.177 回答
0

请尝试此解决方案:

var routeValueDictionary = new RouteValueDictionary("");
routeValueDictionary.Add("keyName",value);
// Add any item you want!
@html.ActionLink("LinkName", "ActionName", "ControllerName",
routeValueDictionary , new{@class="form-control"})
于 2019-07-29T11:51:42.697 回答