zoukankan      html  css  js  c++  java
  • .net mvc HtmlHelper扩展使用

    如果是你是从webform开始接触.net,你应该记得webform开发中,存在自定义控件这东西,它使得我们开发起来十分方便,如今mvc大势所趋,其实在mvc开发时,也存在自定义控件这么个东西,那就是HtmlHelper扩展,如果你们已经使用过Razor,那你们基本都用过:@Html.BeginForm(),@Html.DropDownList()等基本的控件,但是这些控件肯定无法满足我们的需求,所以我们需要自定义一些扩展,我这写了一些扩展:

     1 public static class HtmlHelperExtensions
     2     {
     3         public static MvcHtmlString ConvertToEnumDesc(this HtmlHelper helper, object enumValue)
     4         {
     5             return new MvcHtmlString(EnumDescription.GetFieldText(enumValue));
     6         }
     7 
     8         public static MvcHtmlString ConvertTimestampToDateString(this HtmlHelper helper, long timestamp, string DateFormat = "yyyy-MM-dd HH:mm:ss")
     9         {
    10             DateTime dtStart = TimeZone.CurrentTimeZone.ToLocalTime(new DateTime(1970, 1, 1));
    11             long lTime = timestamp * 10000000;
    12             TimeSpan toNow = new TimeSpan(lTime); 
    13             
    14             return new MvcHtmlString(dtStart.Add(toNow).ToString(DateFormat));
    15         }
    16 
    17         public static MvcHtmlString NewMenuLink(this HtmlHelper helper, string linkText, string actionName,
    18                                       string controllerName, object routeValues = null)
    19         {
    20             string currentAction = helper.ViewContext.RouteData.GetRequiredString("action");
    21             string currentController = helper.ViewContext.RouteData.GetRequiredString("controller");
    22 
    23             //modified this to work whenever a view of the controller is selected
    24             //if (actionName == currentAction && controllerName == currentController)
    25 
    26             //var strLink = helper.ActionLink(linkText, actionName, controllerName, routeValues, null);
    27 
    28             var result = new TagBuilder("a");
    29             var url = UrlHelper.GenerateUrl(null, actionName, controllerName, new RouteValueDictionary(routeValues), helper.RouteCollection,
    30                                             helper.ViewContext.RequestContext, true);
    31             result.Attributes.Add("href", url);
    32             result.InnerHtml = "<i class="fa fa-file-o"></i>" + linkText;
    33             
    34 
    35             var strResult = "";
    36             if (controllerName.ToLower() == currentController.ToLower() && actionName.ToLower() == currentAction.ToLower())
    37             {
    38                 strResult = "<li class="active">" + result.ToString() + "</li>";
    39             }
    40             else
    41             {
    42                 strResult = "<li>" + result.ToString() + "</li>";
    43             }
    44             return new MvcHtmlString(strResult);
    45         }
    46 
    47         public static MvcHtmlString MenuLink(this HtmlHelper helper, string linkText, string actionName,
    48                                        string controllerName, object routeValues = null)
    49         {
    50             string currentAction = helper.ViewContext.RouteData.GetRequiredString("action");
    51             string currentController = helper.ViewContext.RouteData.GetRequiredString("controller");
    52 
    53             //modified this to work whenever a view of the controller is selected
    54             //if (actionName == currentAction && controllerName == currentController)
    55 
    56             var strLink = helper.ActionLink(linkText, actionName, controllerName, routeValues, null);
    57 
    58 
    59             var strResult = "";
    60             if (controllerName.ToLower() == currentController.ToLower() && actionName.ToLower() == currentAction.ToLower())
    61             {
    62                 strResult = "<li class="active">" + strLink.ToString() + "</li>";
    63             }
    64             else
    65             {
    66                 strResult = "<li>" + strLink.ToString() + "</li>";
    67             }
    68             return new MvcHtmlString(strResult);
    69         }
    70     }

    那么问题就来了,这些扩展如何来使用?

     1 <div class="container-fluid">
     2         <div class="row-fluid">
     3             <div class="span2">
     4                 <div class="well sidebar-nav">
     5                     <ul class="nav nav-list">
     6                             @Html.MenuLink("站点配置", "Index", "Sites")
     7                             @Html.MenuLink("添加站点", "Add", "Sites")
     8                             @Html.MenuLink("用户属性配置", "ServiceAttributeList", "Sites")
     9                             @Html.MenuLink("通行证配置", "PassportServerConfig", "Sites")
    10                     </ul>
    11                 </div>
    12                 <!--/.well -->
    13             </div>
    14             <!--/span-->
    15             <div class="span10">
    16                 @RenderBody()
    17             </div>
    18             <!--/span-->
    19         </div>
    20         <!--/row-->
    21 
    22         <hr>
    23 
    24         <footer>
    25             <p>&copy;xxxxx</p>
    26         </footer>
    27 
    28     </div>

    但是在引用的时候有一个地方是要注意一下的,那就是引用问题,在view端目前是引用不了@Html.MenuLink的,我们需要再引用的页面@using Namespace;

    我个人是不喜欢这么处理的,所以用另外一种方法来引用,在Views目录下有个web.config文件 

     1 <system.web.webPages.razor>
     2     <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
     3     <pages pageBaseType="System.Web.Mvc.WebViewPage">
     4       <namespaces>
     5         <add namespace="System.Web.Mvc" />
     6         <add namespace="System.Web.Mvc.Ajax" />
     7         <add namespace="System.Web.Mvc.Html" />
     8         <add namespace="System.Web.Optimization"/>
     9         <add namespace="System.Web.Routing" />
    10         <add namespace="Kendo.Mvc.UI" />
    11       </namespaces>
    12     </pages>
    13   </system.web.webPages.razor>
  • 相关阅读:
    Linux 中如何用源代码安装软件,以及如何卸载它
    Linux 中的 Install命令
    PHP 常用header头定义
    如何防止重复提交表单?
    如何从二维数组中的多个key中获取指定key的值?
    jquery的ajax全局事件详解
    PHP+MySQL分页显示示例分析
    javascript中的事件类型
    事件委托/事件代理,
    彻底弄懂JS的事件冒泡和事件捕获
  • 原文地址:https://www.cnblogs.com/xuxzx/p/4046015.html
Copyright © 2011-2022 走看看