任何人都明白为什么以下不起作用?
我想要做的是在视图上形成新链接时,将当前路由数据加上我通过匿名对象添加的内容复制到新的routedata中。
例如,如果我将参数“page”作为非路径路径(即,如果存在查询字符串,则它会溢出路径路径并将其注入方法参数),例如
public ActionResult ChangePage(int? page) { }
我希望View在使用帮助程序构建链接时知道更新的页面。我认为最好的方法是使用以下内容:
public ActionResult ChangePage(int? page)
{
if(page.HasValue)
RouteData.Values.Add("Page", page);
ViewData.Model = GetData(page.HasValue ? page.Value : 1);
}
然后在视图标记中,我可以使用此重载渲染我的下一个,预览,排序,showmore(任何相关的链接):
public static class Helpers
{
public static string ActionLinkFromRouteData(this HtmlHelper helper, string linkText, string actionName, object values)
{
RouteValueDictionary routeValueDictionary = new RouteValueDictionary();
foreach(var routeValue in helper.ViewContext.RouteData.Values)
{
if(routeValue.Key != "controller" && routeValue.Key != "action")
{
routeValueDictionary[routeValue.Key] = routeValue;
}
}
foreach(var prop in GetProperties(values))
{
routeValueDictionary[prop.Name] = prop.Value;
}
return helper.ActionLink(linkText, actionName, routeValueDictionary;
}
private static IEnumerable<PropertyValue> GetProperties(object o)
{
if (o != null) {
PropertyDescriptorCollection props = TypeDescriptor.GetProperties(o);
foreach (PropertyDescriptor prop in props) {
object val = prop.GetValue(o);
if (val != null) {
yield return new PropertyValue { Name = prop.Name, Value = val };
}
}
}
}
private sealed class PropertyValue
{
public string Name { get; set; }
public object Value { get; set; }
}
}
我发布的代码只是为了说明这一点。这不起作用,感觉不对...指针?
答案 0 :(得分:1)
将页面信息传递给ViewData?
PagedResultsInfo
(或其他)听起来像是一个你可以写的课......我们这样做。