Asp.net mvc 使用Razor视图的路由值集合中的动态命名参数
我使用助手方法在视图中创建节:Asp.net mvc 使用Razor视图的路由值集合中的动态命名参数,asp.net-mvc,dynamic,razor,named-parameters,routevalues,Asp.net Mvc,Dynamic,Razor,Named Parameters,Routevalues,我使用助手方法在视图中创建节: @helper CreateFacetSection(WebViewPage page, string sectionName, List<FacetValue> model) { var showMore = int.Parse(WebConfigurationManager.AppSettings["ShowMore"]); <section id="@section
@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>
}
是否有任何方法可以在路由值集合中传递动态命名参数?在上面的例子中,我希望动态命名一个参数sectionName
,以便在action方法中获得正确的值绑定。它将根据我当前作为参数传递给helper方法的sectionName
而变化
现在我得到了这样一个链接:
http://leniel-pc:8083/realty/search?sectionName=Volta%20Redonda
应该是:
http://leniel-pc:8083/realty/search?City=Volta%20Redonda
City
或我作为参数而不是sectionName
传递的任何内容,因为“City”是我传递给helper方法的参数sectionName
的值
我可以为
sectionName
做一个切换,但我只是想知道是否有更简洁的方法来实现这一点。您没有展示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
,因此使用模型中的LINQ构建它可能非常容易。您还没有展示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
,因此使用模型中的LINQ构建它可能非常容易。请尝试以下解决方案:
var routeValueDictionary = new RouteValueDictionary("");
routeValueDictionary.Add("keyName",value);
// Add any item you want!
@html.ActionLink("LinkName", "ActionName", "ControllerName",
routeValueDictionary , new{@class="form-control"})
请尝试此解决方案:
var routeValueDictionary = new RouteValueDictionary("");
routeValueDictionary.Add("keyName",value);
// Add any item you want!
@html.ActionLink("LinkName", "ActionName", "ControllerName",
routeValueDictionary , new{@class="form-control"})
伟大的达林。。。就这么做了,一切如期进行。上帝保佑达林先生。。。就这么做了,一切如期进行。上帝保佑D