Len*_*rri 1 asp.net-mvc dynamic named-parameters routevalues razor
我使用辅助方法在视图中创建部分:
@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>
}
Run Code Online (Sandbox Code Playgroud)
现在让我们说我@Html.ActionLink在上面的帮助器中使用了这个自定义助手:
@Html.ActionLinkWithQueryString(fv.Range, "Search", new { sectionName = fv.Range });
Run Code Online (Sandbox Code Playgroud)
有没有办法在路由值集合中传递动态命名参数?在上面的例子中,我想要一个sectionName动态命名的参数,以便我在action方法中获得正确的值绑定.根据sectionName我目前作为辅助方法的参数传递,它会有所不同......
现在我得到这样的链接:
http://leniel-pc:8083/realty/search?sectionName=Volta%20Redonda
Run Code Online (Sandbox Code Playgroud)
它应该是:
http://leniel-pc:8083/realty/search?City=Volta%20Redonda
Run Code Online (Sandbox Code Playgroud)
City或者我作为参数传递的任何东西而不是sectionName因为"City"是sectionName我传递给辅助方法的参数的值.
我可以做一个转换,sectionName但我只是想知道是否有更简洁的方法来实现这一目标.
您尚未显示ActionLinkWithQueryString自定义帮助程序的外观,但您可以添加一个重载,RouteValueDictionary而不是匿名对象.然后很容易:
var values = new RouteValueDictionary();
values["somedynamicname"] = "some dynamic value";
values["someotherdynamicname"] = "some other dynamic value";
Run Code Online (Sandbox Code Playgroud)
然后:
@Html.ActionLinkWithQueryString(fv.Range, "Search", values);
Run Code Online (Sandbox Code Playgroud)
既然你说,这是使用扩展方法ActionLink内部,也有重载ActionLink称取RouteValueDictionary的,而不是一个匿名对象作为参数路线.
而且由于RouteValueDictionary有一个构造函数IDictionary<string, object>可以很容易地使用模型中的LINQ来构建它.
| 归档时间: |
|
| 查看次数: |
3733 次 |
| 最近记录: |