溢出(即查询字符串)RouteData从控制器返回到视图中
时间:2020-03-06 14:41:11 来源:igfitidea点击:
任何人都知道为什么以下内容不起作用?
我想做的是在视图上形成新链接时,将当前路线数据以及通过匿名对象添加的任何内容复制到新的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); }
然后,在视图标记中,我可以使用此重载来呈现我的下一个,预览,排序,显示更多(任何相关链接):
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; } } }
我发布代码只是为了说明这一点。这行不通,感觉不对...指针?
解决方案
将页面信息传递给ViewData吗?
PagedResultsInfo
(或者其他东西)听起来就像一个我们也可以编写的类...我们这样做。