asp.net-mvc-3 – 如何格式化MVC Route参数?
发布时间:2020-12-16 03:27:00 所属栏目:asp.Net 来源:网络整理
导读:我在我的测试MVC3项目中映射了以下路由 – routes.MapRoute( "TestRoute","test/{DateFrom}/{DateTo}",new { controller = "Home",action = "TestRoute" }); 然后我在视图中建立一个链接如下 – @Html.ActionLink("Test Link","TestRoute",new{ DateFrom = n
我在我的测试MVC3项目中映射了以下路由 –
routes.MapRoute( "TestRoute","test/{DateFrom}/{DateTo}",new { controller = "Home",action = "TestRoute" } ); 然后我在视图中建立一个链接如下 – @Html.ActionLink("Test Link","TestRoute",new { DateFrom = new DateTime(2006,02,16),DateTo = new DateTime(2008,04,22) }) 在渲染时,输出此URL – /test/02/16/2006%2000%3a00%3a00/04/22/2008%2000%3a00%3a00 如您所见,框架已在DateTime参数上调用ToString(),然后对结果进行编码. 我想格式化DateTime路由参数,以便它们输出为“yyyy-MM-dd”. 显然我可以在构建Action Link时指定格式,如下所示 – @Html.ActionLink("Test Link",16).ToString("yyyy-MM-dd"),22).ToString("yyyy-MM-dd") }) 但是我们知道这很麻烦,很麻烦而且不干. 我已经尝试在模型中的属性上使用[DisplayFormat(DataFormatString =“{0:dd-MM-yyyy}”)]属性,希望这是答案,但是看起来这些只在构建编辑器表单时才受到尊重. 仅供参考,如果我在浏览器的URL中手动输入DateTime参数(例如/ test / 2006-02-16 / 2008-04-22),参数会被正确解析,所以这只是将它们格式化为我想要的情况. 解决方法
您可以编写自定义帮助程序来处理具有日期的链接:
namespace System.Web.Mvc { public static class LinkExtensions { public static MvcHtmlString DateLink(this HtmlHelper htmlHelper,string linkText,string actionName) { return DateLink(htmlHelper,linkText,actionName,new RouteValueDictionary(),null); } public static MvcHtmlString DateLink(this HtmlHelper htmlHelper,string actionName,object routeValues) { return DateLink(htmlHelper,new RouteValueDictionary(routeValues),new RouteValueDictionary()); } public static MvcHtmlString DateLink(this HtmlHelper htmlHelper,object routeValues,object htmlAttributes) { return DateLink(htmlHelper,HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes)); } public static MvcHtmlString DateLink(this HtmlHelper htmlHelper,RouteValueDictionary routeValues) { return DateLink(htmlHelper,routeValues,RouteValueDictionary routeValues,IDictionary<string,object> htmlAttributes) { if (String.IsNullOrEmpty(linkText)) { throw new ArgumentException("linkText"); } //check additional parameters List<string> keys = new List<string>(routeValues.Keys); foreach (string key in keys) { if (routeValues[key].GetType() == typeof(DateTime)) routeValues[key] = ((DateTime)routeValues[key]).ToString("yyyy-MM-dd"); } return MvcHtmlString.Create(HtmlHelper.GenerateLink(htmlHelper.ViewContext.RequestContext,htmlHelper.RouteCollection,null,(string)routeValues["controller"],htmlAttributes)); } } 然后你可以像这样使用它: @Html.DateLink("TestLink","Details",new { starttime = new DateTime(2011,1,1),endtime = new DateTime(2012,1)}) 这会产生以下URL: http://localhost/MyController/Details/2011-01-01/2012-01-01 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
相关内容
- asp.net – $(“#dialog”).parent().appendTo($(“form:f
- Razor Page Library:开发独立通用RPL(内嵌wwwroot资源文件
- asp.net – Azure Web角色 – 长时间运行请求(负载均衡器超
- asp.net-mvc – 用于MVC 3的Castle Windsor依赖关系解析器
- ASP.NET MVC学习之NuGet在VS中的运用浅谈
- [asp.net mvc 奇淫巧技] 03 - 枚举特性扩展解决枚举命名问题
- 如何在ASP.NET应用程序中记录错误(异常)?
- asp.net – 保持负载均衡器在长时间运行期间超时
- asp.net-mvc – 在asp.net mvc中启动一组未选中的radiobutt
- asp.net-mvc – 从客户端检测到潜在危险的Request.Form值
推荐文章
站长推荐
热点阅读