我使用辅助方法在视图中创建部分:
@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 ▼</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
进行切换,但我只是想知道是否有更简洁的方法来实现这一目标。
答案 0 :(得分:5)
您尚未显示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构建它。
答案 1 :(得分:0)
请尝试以下解决方案:
var routeValueDictionary = new RouteValueDictionary("");
routeValueDictionary.Add("keyName",value);
// Add any item you want!
@html.ActionLink("LinkName", "ActionName", "ControllerName",
routeValueDictionary , new{@class="form-control"})