dtc*_*dtc 12 asp.net-mvc viewdata query-string
在asp.net mvc中保存查询字符串值的好方法是什么?
如果我有一个网址:/ questions?page = 2&sort = newest&items = 50&showcomments = 1&search = abcd
在分页链接上,我想在所有链接中保留这些查询字符串值,以便在用户点击"下一页"时保持这些值(在这种情况下,页面值会改变,但其余部分将保持不变)
我可以想到两种方法:
这个比那个好吗?这些是唯一的选择还是有更好的方法来做到这一点?
我使用扩展方法:
public static string RouteLinkWithExtraValues(
this HtmlHelper htmlHelper,
string name,
object values)
{
var routeValues = new RouteValueDictionary(htmlHelper.ViewContext.RouteData.Values);
var extraValues = new RouteValueDictionary(values);
foreach (var val in extraValues)
{
if (!routeValues.ContainsKey(val.Key))
routeValues.Add(val.Key, val.Value);
else
routeValues[val.Key] = val.Value;
}
foreach (string key in htmlHelper.ViewContext.HttpContext.Request.Form)
{
routeValues[key] = htmlHelper.ViewContext.HttpContext.Request.Form[key];
}
foreach (string key in htmlHelper.ViewContext.HttpContext.Request.QueryString)
{
if (!routeValues.ContainsKey(key) && htmlHelper.ViewContext.HttpContext.Request.QueryString[key] != "")
routeValues[key] = htmlHelper.ViewContext.HttpContext.Request.QueryString[key];
}
var urlHelper = new UrlHelper(htmlHelper.ViewContext.RequestContext);
return string.Format("<a href=\"{0}\">{1}</a>", urlHelper.RouteUrl(routeValues), name);
}
Run Code Online (Sandbox Code Playgroud)
我会在视图中处理QueryString(您的选项#1),而不是从控制器传递它.此方法使视图更加自包含,允许您将其转换为视图控件并在不同视图中重用它.
注意:直接在视图中访问QueryString似乎违反了分离模型和视图的设计原则,但实际上这些数据是与视图相关的导航问题,而不是模型的真正部分.
归档时间: |
|
查看次数: |
8620 次 |
最近记录: |