溢出(即查询字符串)RouteData从控制器返回到视图中

时间:2008-09-24 20:02:42

标签: asp.net-mvc

任何人都明白为什么以下不起作用?

我想要做的是在视图上形成新链接时,将当前路由数据加上我通过匿名对象添加的内容复制到新的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; }
    }
}

我发布的代码只是为了说明这一点。这不起作用,感觉不对...指针?

1 个答案:

答案 0 :(得分:1)

将页面信息传递给ViewData?

PagedResultsInfo(或其他)听起来像是一个你可以写的课......我们这样做。