zoukankan      html  css  js  c++  java
  • MVC小系列(十八)【给checkbox和radiobutton添加集合的重载】


    mvc对DropDownListFor的重载很多,但对checkbox和radiobutton没有对集合的重载

    所以该讲主要针对集合的扩展:

    #region 复选框扩展  
            /// <summary>
            /// 复选框扩展
            /// </summary>
            /// <typeparam name="TModel">模型类型</typeparam>
            /// <typeparam name="TProperty">属性类型</typeparam>
            /// <param name="helper">HTML辅助方法。</param>
            /// <param name="expression">lambda表达式。</param>
            /// <param name="selectList">选择项。</param>
            /// <param name="htmlAttributes">HTML属性。</param>
            /// <returns>返回复选框MVC的字符串。</returns>
            public static MvcHtmlString CheckBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
                                                                            Expression<Func<TModel, TProperty>> expression,
                                                                            IEnumerable<SelectListItem> selectList,
                                                                            IDictionary<string, object> htmlAttributes = null)
            {
                if (selectList == null || expression == null)
                {
                    return MvcHtmlString.Empty;
                }
                string name = ExpressionHelper.GetExpressionText(expression);
                object obj = helper.ViewData.Eval(name);
                string values = "," + obj + ",";
                StringBuilder sb = new StringBuilder();
                int index = 0;
                foreach (var item in selectList)
                {
                    TagBuilder tag = new TagBuilder("input");
                    tag.MergeAttributes<string, object>(htmlAttributes);
                    tag.MergeAttribute("type", "checkbox", true);
                    tag.MergeAttribute("name", name, true);
                    tag.MergeAttribute("id", name + index, true);
                    tag.MergeAttribute("value", item.Value, true);
                    if (values.IndexOf("," + item.Value + ",") > -1)
                    {
                        tag.MergeAttribute("checked", "checked", true);
                    }
                    sb.AppendLine(tag.ToString(TagRenderMode.SelfClosing) + " ");
                    TagBuilder label = new TagBuilder("label");
                    label.MergeAttribute("for", name + index);
                    label.InnerHtml = item.Text;
                    sb.AppendLine(label.ToString());
                    index++;
                }
                return new MvcHtmlString(sb.ToString());
            }
    
            /// <summary>
            /// 复选框扩展。
            /// </summary>
            /// <typeparam name="TModel">模型类型。</typeparam>
            /// <typeparam name="TProperty">属性类型。</typeparam>
            /// <param name="helper">HTML辅助方法。</param>
            /// <param name="expression">lambda表达式。</param>
            /// <param name="selectList">选择项。</param>
            /// <param name="htmlAttributes">HTML属性。</param>
            /// <returns>返回复选框MVC的字符串。</returns>
            public static MvcHtmlString CheckBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
                                                                            Expression<Func<TModel, TProperty>> expression,
                                                                            IEnumerable<SelectListItem> selectList,
                                                                            object htmlAttributes)
            {
                return helper.CheckBoxListFor<TModel, TProperty>(expression, selectList, new RouteValueDictionary(htmlAttributes));
            }
            #endregion
    
            #region 单选框扩展  
            /// <summary>
            /// 单选框扩展
            /// </summary>
            /// <typeparam name="TModel">模型类型</typeparam>
            /// <typeparam name="TProperty">属性类型</typeparam>
            /// <param name="helper">HTML辅助方法。</param>
            /// <param name="expression">lambda表达式。</param>
            /// <param name="selectList">选择项。</param>
            /// <param name="htmlAttributes">HTML属性。</param>
            /// <returns>返回复选框MVC的字符串。</returns>
            public static MvcHtmlString RadioBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
                                                                            Expression<Func<TModel, TProperty>> expression,
                                                                            IEnumerable<SelectListItem> selectList,
                                                                            IDictionary<string, object> htmlAttributes = null)
            {
                if (selectList == null || expression == null)
                {
                    return MvcHtmlString.Empty;
                }
                string name = ExpressionHelper.GetExpressionText(expression);
                object obj = helper.ViewData.Eval(name);
                string values = "," + obj + ",";
                StringBuilder sb = new StringBuilder();
                int index = 0;
                foreach (var item in selectList)
                {
                    TagBuilder tag = new TagBuilder("input");
                    tag.MergeAttributes<string, object>(htmlAttributes);
                    tag.MergeAttribute("type", "radiobutton", true);
                    tag.MergeAttribute("name", name, true);
                    tag.MergeAttribute("id", name + index, true);
                    tag.MergeAttribute("value", item.Value, true);
                    if (values.IndexOf("," + item.Value + ",") > -1)
                    {
                        tag.MergeAttribute("checked", "checked", true);
                    }
                    sb.AppendLine(tag.ToString(TagRenderMode.SelfClosing) + " ");
                    TagBuilder label = new TagBuilder("label");
                    label.MergeAttribute("for", name + index);
                    label.InnerHtml = item.Text;
                    sb.AppendLine(label.ToString());
                    index++;
                }
                return new MvcHtmlString(sb.ToString());
            }
    
            /// <summary>
            /// 复选框扩展。
            /// </summary>
            /// <typeparam name="TModel">模型类型。</typeparam>
            /// <typeparam name="TProperty">属性类型。</typeparam>
            /// <param name="helper">HTML辅助方法。</param>
            /// <param name="expression">lambda表达式。</param>
            /// <param name="selectList">选择项。</param>
            /// <param name="htmlAttributes">HTML属性。</param>
            /// <returns>返回复选框MVC的字符串。</returns>
            public static MvcHtmlString RadioBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> helper,
                                                                            Expression<Func<TModel, TProperty>> expression,
                                                                            IEnumerable<SelectListItem> selectList,
                                                                            object htmlAttributes)
            {
                return helper.CheckBoxListFor<TModel, TProperty>(expression, selectList, new RouteValueDictionary(htmlAttributes));
            }
    
            /// <summary>
            /// 自定义扩展方法
            /// </summary>
            /// <param name="htmlHelper"></param>
            /// <param name="name"></param>
            /// <param name="listInfos"></param>
            /// <param name="htmlAttributes"></param>
            /// <returns></returns>
            public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name,
    
                  List<CheckBoxListOver> listInfos, IDictionary<string, object> htmlAttributes)
            {
    
                if (string.IsNullOrEmpty(name))
                {
    
                    throw new ArgumentException("此参数不能为空", "name");
    
                }
    
                if (listInfos == null)
                {
    
                    throw new ArgumentException("listInfos");
    
                }
    
                StringBuilder sb = new StringBuilder();
    
                foreach (CheckBoxListOver info in listInfos)
                {
    
                    TagBuilder builder = new TagBuilder("input");
    
                    if (info.IsChecked)
                    {
    
                        builder.MergeAttribute("checked", "checked");
    
                    }
    
                    builder.MergeAttributes(htmlAttributes);
    
                    builder.MergeAttribute("type", "checkbox");
    
                    builder.MergeAttribute("name", name);
    
                    builder.InnerHtml = info.DisplayText;
    
                    sb.Append(builder.ToString(TagRenderMode.Normal));
    
                    sb.Append("<br />");
    
                }
                return new MvcHtmlString(sb.ToString());
            }
             
            ///// <summary>
            ///// 重载方法:不含属性键值对集合
            ///// </summary>
            ///// <param name="htmlHelper"></param>
            ///// <param name="name"></param>
            ///// <param name="listInfos"></param>
            ///// <returns></returns>
            //  public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name,
    
            //      List<CheckBoxListOver> listInfos)
    
            //  {
    
            //      return htmlHelper.CheckBoxList(name, listInfos, null);
    
            //  }
    
       
    
             
            ///// <summary>
            //  ///  重载方法:从路由中拿数据
            ///// </summary>
            ///// <param name="htmlHelper"></param>
            ///// <param name="name"></param>
            ///// <param name="listInfos"></param>
            ///// <param name="htmlAttributes"></param>
            ///// <returns></returns>
            //  public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name,
    
            //      List<CheckBoxListOver> listInfos, object htmlAttributes)
    
            //  {
    
            //      return htmlHelper.CheckBoxList(name, listInfos,
    
            //          ((IDictionary<string, object>) new RouteValueDictionary(htmlAttributes)));
    
            //  }
    
            public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<CheckBoxListOver> listInfo)
            {
                return htmlHelper.CheckBoxList(name, listInfo, (IDictionary<string, object>)null, 0);
            }
    
            public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<CheckBoxListOver> listInfo, object htmlAttributes)
    
              {
    
                  return htmlHelper.CheckBoxList
    
                  (
    
                      name,
    
                      listInfo,
    
                      (IDictionary<string, object>)new RouteValueDictionary(htmlAttributes),
    
                      0
    
                  );
    
              }
    
    
             //public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<CheckBoxListOver> listInfo, IDictionary<string, object> htmlAttributes)
    
             //{
    
             //    if (String.IsNullOrEmpty(name))
    
             //    {
    
             //        throw new ArgumentException("必须给CheckBoxList一个Tag Name", "name");
    
             //    }
    
             //    if (listInfo == null)
    
             //    {
    
             //        throw new ArgumentNullException("必须要设置List<CheckBoxListInfo> listInfo");
    
             //    }
    
             //    if (listInfo.Count < 1)
    
             //    {
    
             //        throw new ArgumentException("List<CheckBoxListInfo> listInfo 至少要一组资料", "listInfo");
    
             //    }
    
             //    StringBuilder sb = new StringBuilder();
    
             //    int lineNumber = 0;
    
             //    foreach (CheckBoxListOver info in listInfo)
    
             //    {
    
             //        lineNumber++;
    
             //        TagBuilder builder = new TagBuilder("input");
    
             //        if (info.IsChecked)
    
             //        {
    
             //            builder.MergeAttribute("checked", "checked");
    
             //        }
    
             //        builder.MergeAttributes<string, object>(htmlAttributes);
    
             //        builder.MergeAttribute("type", "checkbox");
    
             //        builder.MergeAttribute("value", info.Value);
    
             //        builder.MergeAttribute("name", name);
    
             //        builder.InnerHtml = string.Format(" {0} ", info.DisplayText);
    
             //        sb.Append(builder.ToString(TagRenderMode.Normal));
    
             //        sb.Append("</br>");
    
             //    }
    
             //    return new MvcHtmlString(sb.ToString());
    
             //}
    
             public static MvcHtmlString CheckBoxList(this HtmlHelper htmlHelper, string name, List<CheckBoxListOver> listInfo, IDictionary<string, object> htmlAttributes, int number)
    
              {
                  if (listInfo== null)
                  {
                      return null;
                  }
                  if (String.IsNullOrEmpty(name))
    
                  {
    
                      throw new ArgumentException("必须给这些CheckBoxListOver一个Tag Name", "name");
    
                  }
    
                  if (listInfo == null)
    
                  {
    
                      throw new ArgumentNullException("必须要设置List<CheckBoxListOver> listInfo");
    
                  }
    
                  if (listInfo.Count < 1)
    
                  {
    
                      throw new ArgumentException("List<CheckBoxListOver> listInfo 至少要有一组数据", "listInfo");
    
                  }
    
                  StringBuilder sb = new StringBuilder();
                  sb.Append("<table>");
                  sb.Append("<tr>");
                  int lineNumber = 0;
              
                  foreach (CheckBoxListOver info in listInfo)
                  {
    
                      lineNumber++;
                      TagBuilder builder = new TagBuilder("input");
    
    
                      if (info.IsChecked)
                      {
    
                          builder.MergeAttribute("checked", "checked");
    
                      }
    
                      builder.MergeAttributes<string, object>(htmlAttributes);
    
                      builder.MergeAttribute("type", "checkbox");
    
                      builder.MergeAttribute("value", info.Value);
                      builder.MergeAttribute("id", "myCheckbox");
                      builder.MergeAttribute("name", name);
    
                     // builder.InnerHtml = string.Format(" {0} ", info.DisplayText);
    
                      builder.InnerHtml = "<span style='font-size: 12pt;font-family:宋体'>" + info.DisplayText + "</span>";
    
                      sb.Append("<td>");
                      sb.Append(builder.ToString(TagRenderMode.Normal));
                      sb.Append("</td>");
                    
    
    
                      if (number == 0)
                      {
    
                          sb.Append("<br />");
    
                      }
    
                      else if (lineNumber % number == 0)
                      {
                          sb.Append("</tr>");
                          sb.Append("<tr>");
                      }
    
                  }
                  sb.Append("</tr>");
                  sb.Append("</table>");
                  return new MvcHtmlString(sb.ToString());
              }
    
            #endregion
    
    
             #region 单选框和复选框的扩展
             /// <summary>
             /// 复选框,selValue为选中项
             /// </summary>
             /// <param name="htmlHelper"></param>
             /// <param name="name"></param>
             /// <param name="selectList"></param>
             /// <param name="selValue"></param>
             /// <returns></returns>
             public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, IEnumerable<string> selValue)
             {
                 return CheckBoxAndRadioFor<object, string>(name, selectList, false, selValue);
             }
             public static MvcHtmlString CheckBox(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string selValue)
             {
                 return CheckBox(htmlHelper, name, selectList, new List<string> { selValue });
    
             }
             /// <summary>
             /// 复选框
             /// </summary>
             /// <param name="htmlHelper"></param>
             /// <param name="name"></param>
             /// <param name="selectList"></param>
             /// <returns></returns>
             public static MvcHtmlString CheckBoxFor(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList)
             {
                 return CheckBox(htmlHelper, name, selectList, new List<string>());
             }
             /// <summary>
             /// 根据列表输出checkbox
             /// </summary>
             /// <typeparam name="TModel"></typeparam>
             /// <typeparam name="TProperty"></typeparam>
             /// <param name="htmlHelper"></param>
             /// <param name="expression"></param>
             /// <param name="selectList"></param>
             /// <returns></returns>
             public static MvcHtmlString CheckBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList)
             {
                 return CheckBoxFor(htmlHelper, expression, selectList, null);
             }
    
             /// <summary>
             ///  根据列表输出checkbox,selValue为默认选中的项
             /// </summary>
             /// <typeparam name="TModel"></typeparam>
             /// <typeparam name="TProperty"></typeparam>
             /// <param name="htmlHelper"></param>
             /// <param name="expression"></param>
             /// <param name="selectList"></param>
             /// <param name="selValue"></param>
             /// <returns></returns>
             public static MvcHtmlString CheckBoxFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string selValue)
             {
                 string name = ExpressionHelper.GetExpressionText(expression);
                 return CheckBoxAndRadioFor<TModel, TProperty>(name, selectList, false, new List<string> { selValue });
             }
             /// <summary>
             /// 输出单选框和复选框
             /// </summary>
             /// <typeparam name="TModel"></typeparam>
             /// <typeparam name="TProperty"></typeparam>
             /// <param name="expression"></param>
             /// <param name="selectList"></param>
             /// <param name="isRadio"></param>
             /// <param name="selValue"></param>
             /// <returns></returns>
             static MvcHtmlString CheckBoxAndRadioFor<TModel, TProperty>(
                 string name,
                 IEnumerable<SelectListItem> selectList,
                 bool isRadio,
                 IEnumerable<string> selValue)
             {
                 StringBuilder str = new StringBuilder();
                 int c = 0;
                 string check, activeClass;
                 string type = isRadio ? "Radio" : "checkbox";
    
                 foreach (var item in selectList)
                 {
                     c++;
                     if (selValue != null && selValue.Contains(item.Value))
                     {
                         check = "checked='checked'";
                         activeClass = "style=color:red";
                     }
                     else
                     {
                         check = string.Empty;
                         activeClass = string.Empty;
                     }
                     str.AppendFormat("<span><input type='{3}' value='{0}' name={1} id={1}{2} " + check + "/>", item.Value, name, c, type);
                     str.AppendFormat("<label for='{0}{1}' {3}>{2}</lable></span>", name, c, item.Text, activeClass);
    
                 }
                 return MvcHtmlString.Create(str.ToString());
             }
    
    
             public static MvcHtmlString RadioButton(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, IEnumerable<string> selValue)
             {
                 return CheckBoxAndRadioFor<object, string>(name, selectList, true, selValue);
             }
             /// <summary>
             /// 单选按钮组,seletList为选中项
             /// </summary>
             /// <param name="htmlHelper"></param>
             /// <param name="name"></param>
             /// <param name="selectList"></param>
             /// <param name="selValue"></param>
             /// <returns></returns>
             public static MvcHtmlString RadioButton(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList, string selValue)
             {
                 return RadioButton(htmlHelper, name, selectList, new List<string> { selValue });
             }
             /// <summary>
             /// 单选按钮组
             /// </summary>
             /// <param name="htmlHelper"></param>
             /// <param name="name"></param>
             /// <param name="selectList"></param>
             /// <returns></returns>
             public static MvcHtmlString RadioButton(this HtmlHelper htmlHelper, string name, IEnumerable<SelectListItem> selectList)
             {
                 return RadioButton(htmlHelper, name, selectList, new List<string>());
             }
             /// <summary>
             ///  根据列表输出radiobutton
             /// </summary>
             /// <typeparam name="TModel"></typeparam>
             /// <typeparam name="TProperty"></typeparam>
             /// <param name="htmlHelper"></param>
             /// <param name="expression"></param>
             /// <param name="selectList"></param>
             /// <returns></returns>
             public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList)
             {
                 return RadioButtonFor(htmlHelper, expression, selectList, new List<string>());
             }
             public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, IEnumerable<string> selValue)
             {
                 string name = ExpressionHelper.GetExpressionText(expression);
                 return CheckBoxAndRadioFor<TModel, TProperty>(name, selectList, true, selValue);
             }
             /// <summary>
             /// 根据列表输出radiobutton,selValue为默认选中的项
             /// </summary>
             /// <typeparam name="TModel"></typeparam>
             /// <typeparam name="TProperty"></typeparam>
             /// <param name="htmlHelper"></param>
             /// <param name="expression"></param>
             /// <param name="selectList"></param>
             /// <param name="selValue"></param>
             /// <returns></returns>
             public static MvcHtmlString RadioButtonFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> selectList, string selValue)
             {
                 return RadioButtonFor(htmlHelper, expression, selectList, new List<string> { selValue });
             }
             #endregion
    View Code

    再来点其他的扩展,

         #region Admin area extensions
    
            public static MvcHtmlString Hint(this HtmlHelper helper, string value)
            {
                // Create tag builder
                var builder = new TagBuilder("img");
    
                // Add attributes
                var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
                var url = MvcHtmlString.Create(urlHelper.Content("~/Administration/Content/images/ico-help.gif")).ToHtmlString();
    
                builder.MergeAttribute("src", url);
                builder.MergeAttribute("alt", value);
                builder.MergeAttribute("title", value);
    
                // Render tag
                return MvcHtmlString.Create(builder.ToString());
            }
    
            public static HelperResult LocalizedEditor<T, TLocalizedModelLocal>(this HtmlHelper<T> helper, string name,
                 Func<int, HelperResult> localizedTemplate,
                 Func<T, HelperResult> standardTemplate)
                where T : ILocalizedModel<TLocalizedModelLocal>
                where TLocalizedModelLocal : ILocalizedModelLocal
            {
                return new HelperResult(writer =>
                {
                    if (helper.ViewData.Model.Locales.Count > 1)
                    {
                        var tabStrip = new StringBuilder();
                        tabStrip.AppendLine(string.Format("<div id='{0}'>", name));
                        tabStrip.AppendLine("<ul>");
    
                        //default tab
                        tabStrip.AppendLine("<li class='k-state-active'>");
                        tabStrip.AppendLine("Standard");
                        tabStrip.AppendLine("</li>");
    
                        for (int i = 0; i < helper.ViewData.Model.Locales.Count; i++)
                        {
                            //languages
                            var locale = helper.ViewData.Model.Locales[i];
                            var language = EngineContext.Current.Resolve<ILanguageService>().GetLanguageById(locale.LanguageId);
    
                            tabStrip.AppendLine("<li>");
                            var urlHelper = new UrlHelper(helper.ViewContext.RequestContext);
                            var iconUrl = urlHelper.Content("~/Content/images/flags/" + language.FlagImageFileName);
                            tabStrip.AppendLine(string.Format("<img class='k-image' alt='' src='{0}'>", iconUrl));
                            tabStrip.AppendLine(HttpUtility.HtmlEncode(language.Name));
                            tabStrip.AppendLine("</li>");
                        }
                        tabStrip.AppendLine("</ul>");
    
    
    
                        //default tab
                        tabStrip.AppendLine("<div>");
                        tabStrip.AppendLine(standardTemplate(helper.ViewData.Model).ToHtmlString());
                        tabStrip.AppendLine("</div>");
    
                        for (int i = 0; i < helper.ViewData.Model.Locales.Count; i++)
                        {
                            //languages
                            tabStrip.AppendLine("<div>");
                            tabStrip.AppendLine(localizedTemplate(i).ToHtmlString());
                            tabStrip.AppendLine("</div>");
                        }
                        tabStrip.AppendLine("</div>");
                        tabStrip.AppendLine("<script>");
                        tabStrip.AppendLine("$(document).ready(function() {");
                        tabStrip.AppendLine(string.Format("$('#{0}').kendoTabStrip(", name));
                        tabStrip.AppendLine("{");
                        tabStrip.AppendLine("animation:  {");
                        tabStrip.AppendLine("open: {");
                        tabStrip.AppendLine("effects: "fadeIn"");
                        tabStrip.AppendLine("}");
                        tabStrip.AppendLine("}");
                        tabStrip.AppendLine("});");
                        tabStrip.AppendLine("});");
                        tabStrip.AppendLine("</script>");
                        writer.Write(new MvcHtmlString(tabStrip.ToString()));
                    }
                    else
                    {
                        standardTemplate(helper.ViewData.Model).WriteTo(writer);
                    }
                });
            }
            public static MvcHtmlString DeleteConfirmation<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteConfirmation<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteConfirmation<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "Delete";
    
                var modalId =  MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
            /// <summary>
            /// 
            /// </summary>
            /// <typeparam name="T"></typeparam>
            /// <param name="helper"></param>
            /// <param name="actionName"></param>
            /// <param name="buttonsSelector"></param>
            /// <returns></returns>
            public static MvcHtmlString DeleteConfirmation<T>(this HtmlHelper<T> helper, string actionName, int itemId,
             string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "Delete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = itemId,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
            public static MvcHtmlString DeleteBrandCateConfirmation<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteBrandCateConfirmation<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteBrandCateConfirmation<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "BrandCategoryDelete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
            public static MvcHtmlString DeleteConfirmationInfo<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteConfirmationInfo<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteConfirmationInfo<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "CostDelete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
    
            public static MvcHtmlString DeleteConfirmationJLInfo<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteConfirmationJLInfo<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteConfirmationJLInfo<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "JLCostDelete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
    
            public static MvcHtmlString DeleteConfirmationSellerInfo<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteConfirmationSellerInfo<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteConfirmationSellerInfo<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "SellerCostDelete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
    
            public static MvcHtmlString DeleteConfirmationStoreInfo<T>(this HtmlHelper<T> helper, string buttonsSelector) where T : BaseYipondEntityModel
            {
                return DeleteConfirmationStoreInfo<T>(helper, "", buttonsSelector);
            }
    
            public static MvcHtmlString DeleteConfirmationStoreInfo<T>(this HtmlHelper<T> helper, string actionName,
                string buttonsSelector) where T : BaseYipondEntityModel
            {
                if (String.IsNullOrEmpty(actionName))
                    actionName = "StoreCostDelete";
    
                var modalId = MvcHtmlString.Create(helper.ViewData.ModelMetadata.ModelType.Name.ToLower() + "-delete-confirmation")
                    .ToHtmlString();
    
                var deleteConfirmationModel = new DeleteConfirmationModel
                {
                    Id = helper.ViewData.Model.Id,
                    ControllerName = helper.ViewContext.RouteData.GetRequiredString("controller"),
                    ActionName = actionName,
                    WindowId = modalId
                };
    
                var window = new StringBuilder();
                window.AppendLine(string.Format("<div id='{0}' style='display:none;'>", modalId));
                window.AppendLine(helper.Partial("Delete", deleteConfirmationModel).ToHtmlString());
                window.AppendLine("</div>");
                window.AppendLine("<script>");
                window.AppendLine("$(document).ready(function() {");
                window.AppendLine(string.Format("$('#{0}').click(function (e) ", buttonsSelector));
                window.AppendLine("{");
                window.AppendLine("e.preventDefault();");
                window.AppendLine(string.Format("var window = $('#{0}');", modalId));
                window.AppendLine("if (!window.data('kendoWindow')) {");
                window.AppendLine("window.kendoWindow({");
                window.AppendLine("modal: true,");
                window.AppendLine(string.Format("title: '{0}',", EngineContext.Current.Resolve<ILocalizationService>().GetResource("Admin.Common.AreYouSure")));
                window.AppendLine("actions: ['Close']");
                window.AppendLine("});");
                window.AppendLine("}");
                window.AppendLine("window.data('kendoWindow').center().open();");
                window.AppendLine("});");
                window.AppendLine("});");
                window.AppendLine("</script>");
    
                return MvcHtmlString.Create(window.ToString());
            }
    
            public static MvcHtmlString YipondLabelFor<TModel, TValue>(this HtmlHelper<TModel> helper, Expression<Func<TModel, TValue>> expression, bool displayHint = true)
            {
                var result = new StringBuilder();
                var metadata = ModelMetadata.FromLambdaExpression(expression, helper.ViewData);
                var hintResource = string.Empty;
                object value = null;
                if (metadata.AdditionalValues.TryGetValue("YipondResourceDisplayName", out value))
                {
                    var resourceDisplayName = value as YipondResourceDisplayName;
                    if (resourceDisplayName != null && displayHint)
                    {
                        var langId = EngineContext.Current.Resolve<IWorkContext>().WorkingLanguage.Id;
                        hintResource =
                            EngineContext.Current.Resolve<ILocalizationService>()
                            .GetResource(resourceDisplayName.ResourceKey + ".Hint", langId);
    
                        result.Append(helper.Hint(hintResource).ToHtmlString());
                    }
                }
                result.Append(helper.LabelFor(expression, new { title = hintResource }));
                return MvcHtmlString.Create(result.ToString());
            }
    
            public static MvcHtmlString OverrideStoreCheckboxFor<TModel, TValue>(this HtmlHelper<TModel> helper,
                Expression<Func<TModel, bool>> expression,
                Expression<Func<TModel, TValue>> forInputExpression,
                int activeStoreScopeConfiguration)
            {
                var dataInputIds = new List<string>();
                dataInputIds.Add(helper.FieldIdFor(forInputExpression));
                return OverrideStoreCheckboxFor(helper, expression, activeStoreScopeConfiguration, null, dataInputIds.ToArray());
            }
            public static MvcHtmlString OverrideStoreCheckboxFor<TModel, TValue1, TValue2>(this HtmlHelper<TModel> helper,
                Expression<Func<TModel, bool>> expression,
                Expression<Func<TModel, TValue1>> forInputExpression1,
                Expression<Func<TModel, TValue2>> forInputExpression2,
                int activeStoreScopeConfiguration)
            {
                var dataInputIds = new List<string>();
                dataInputIds.Add(helper.FieldIdFor(forInputExpression1));
                dataInputIds.Add(helper.FieldIdFor(forInputExpression2));
                return OverrideStoreCheckboxFor(helper, expression, activeStoreScopeConfiguration, null, dataInputIds.ToArray());
            }
            public static MvcHtmlString OverrideStoreCheckboxFor<TModel, TValue1, TValue2, TValue3>(this HtmlHelper<TModel> helper,
                Expression<Func<TModel, bool>> expression,
                Expression<Func<TModel, TValue1>> forInputExpression1,
                Expression<Func<TModel, TValue2>> forInputExpression2,
                Expression<Func<TModel, TValue3>> forInputExpression3,
                int activeStoreScopeConfiguration)
            {
                var dataInputIds = new List<string>();
                dataInputIds.Add(helper.FieldIdFor(forInputExpression1));
                dataInputIds.Add(helper.FieldIdFor(forInputExpression2));
                dataInputIds.Add(helper.FieldIdFor(forInputExpression3));
                return OverrideStoreCheckboxFor(helper, expression, activeStoreScopeConfiguration, null, dataInputIds.ToArray());
            }
            public static MvcHtmlString OverrideStoreCheckboxFor<TModel>(this HtmlHelper<TModel> helper,
                Expression<Func<TModel, bool>> expression,
                string parentContainer,
                int activeStoreScopeConfiguration)
            {
                return OverrideStoreCheckboxFor(helper, expression, activeStoreScopeConfiguration, parentContainer);
            }
            private static MvcHtmlString OverrideStoreCheckboxFor<TModel>(this HtmlHelper<TModel> helper,
                Expression<Func<TModel, bool>> expression,
                int activeStoreScopeConfiguration,
                string parentContainer = null,
                params string[] datainputIds)
            {
                if (String.IsNullOrEmpty(parentContainer) && datainputIds == null)
                    throw new ArgumentException("Specify at least one selector");
    
                var result = new StringBuilder();
                if (activeStoreScopeConfiguration > 0)
                {
                    //render only when a certain store is chosen
                    const string cssClass = "multi-store-override-option";
                    string dataInputSelector = "";
                    if (!String.IsNullOrEmpty(parentContainer))
                    {
                        dataInputSelector = "#" + parentContainer + " input, #" + parentContainer + " textarea, #" + parentContainer + " select";
                    }
                    if (datainputIds != null && datainputIds.Length > 0)
                    {
                        dataInputSelector = "#" + String.Join(", #", datainputIds);
                    }
                    var onClick = string.Format("checkOverridenStoreValue(this, '{0}')", dataInputSelector);
                    result.Append(helper.CheckBoxFor(expression, new Dictionary<string, object>
                    {
                        { "class", cssClass },
                        { "onclick", onClick },
                        { "data-for-input-selector", dataInputSelector },
                    }));
                }
                return MvcHtmlString.Create(result.ToString());
            }
    
            /// <summary>
            /// Render CSS styles of selected index 
            /// </summary>
            /// <param name="helper">HTML helper</param>
            /// <param name="currentIndex">Current tab index (where appropriate CSS style should be rendred)</param>
            /// <param name="indexToSelect">Tab index to select</param>
            /// <returns>MvcHtmlString</returns>
            public static MvcHtmlString RenderSelectedTabIndex(this HtmlHelper helper, int currentIndex, int indexToSelect)
            {
                if (helper == null)
                    throw new ArgumentNullException("helper");
    
                //ensure it's not negative
                if (indexToSelect < 0)
                    indexToSelect = 0;
                
                //required validation
                if (indexToSelect == currentIndex)
                {
                return new MvcHtmlString(" class='k-state-active'");
                }
    
                return new MvcHtmlString("");
            }
    
            #endregion
    
            #region Common extensions
    
            public static MvcHtmlString RequiredHint(this HtmlHelper helper, string additionalText = null)
            {
                // Create tag builder
                var builder = new TagBuilder("span");
                builder.AddCssClass("required");
                var innerText = "*";
                //add additional text if specified
                if (!String.IsNullOrEmpty(additionalText))
                    innerText += " " + additionalText;
                builder.SetInnerText(innerText);
                // Render tag
                return MvcHtmlString.Create(builder.ToString());
            }
    
            public static string FieldNameFor<T, TResult>(this HtmlHelper<T> html, Expression<Func<T, TResult>> expression)
            {
                return html.ViewData.TemplateInfo.GetFullHtmlFieldName(ExpressionHelper.GetExpressionText(expression));
            }
            public static string FieldIdFor<T, TResult>(this HtmlHelper<T> html, Expression<Func<T, TResult>> expression)
            {
                var id = html.ViewData.TemplateInfo.GetFullHtmlFieldId(ExpressionHelper.GetExpressionText(expression));
                // because "[" and "]" aren't replaced with "_" in GetFullHtmlFieldId
                return id.Replace('[', '_').Replace(']', '_');
            }
            /// <summary>
            /// Creates a days, months, years drop down list using an HTML select control. 
            /// The parameters represent the value of the "name" attribute on the select control.
            /// </summary>
            /// <param name="html">HTML helper</param>
            /// <param name="dayName">"Name" attribute of the day drop down list.</param>
            /// <param name="monthName">"Name" attribute of the month drop down list.</param>
            /// <param name="yearName">"Name" attribute of the year drop down list.</param>
            /// <param name="beginYear">Begin year</param>
            /// <param name="endYear">End year</param>
            /// <param name="selectedDay">Selected day</param>
            /// <param name="selectedMonth">Selected month</param>
            /// <param name="selectedYear">Selected year</param>
            /// <param name="localizeLabels">Localize labels</param>
            /// <returns></returns>
            public static MvcHtmlString DatePickerDropDownsTaiWan(this HtmlHelper html,
                string dayName, string monthName, string yearName,
                int? beginYear = null, int? endYear = null,
                int? selectedDay = null, int? selectedMonth = null, int? selectedYear = null, bool localizeLabels = true)
            {
                var daysList = new TagBuilder("select");
                var monthsList = new TagBuilder("select");
                var yearsList = new TagBuilder("select");
    
                var daysListName = new TagBuilder("label");
                var monthsListName = new TagBuilder("label");
                var yearsListName = new TagBuilder("label");
    
    
                daysList.Attributes.Add("name", dayName);
                monthsList.Attributes.Add("name", monthName);
                yearsList.Attributes.Add("name", yearName);
    
                var days = new StringBuilder();
                var months = new StringBuilder();
                var years = new StringBuilder();
    
                string dayLocale, monthLocale, yearLocale;
                if (localizeLabels)
                {
                    var locService = EngineContext.Current.Resolve<ILocalizationService>();
                    dayLocale = locService.GetResource("Yipond.Info.Fileds.Day");
                    monthLocale = locService.GetResource("Yipond.Info.Fileds.Month");
                    yearLocale = locService.GetResource("Yipond.Info.Fileds.Year");
                }
                else
                {
                    dayLocale = "Day";
                    monthLocale = "Month";
                    yearLocale = "Year";
                }
    
                days.AppendFormat("<option value='{0}'>{1}</option>", "0", "");
                for (int i = 1; i <= 31; i++)
                    days.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                        (selectedDay.HasValue && selectedDay.Value == i) ? " selected="selected"" : null);
    
    
                months.AppendFormat("<option value='{0}'>{1}</option>", "0", "");
                for (int i = 1; i <= 12; i++)
                {
                    months.AppendFormat("<option value='{0}'{1}>{2}</option>",
                                        i,
                                        (selectedMonth.HasValue && selectedMonth.Value == i) ? " selected="selected"" : null,i);
                }
    
    
                years.AppendFormat("<option value='{0}'>{1}</option>", "0", "");
    
                if (beginYear == null)
                    beginYear = CommonHelper.GetDateTimeNow().Year - 100;
                if (endYear == null)
                    endYear = CommonHelper.GetDateTimeNow().Year;
    
                if (endYear > beginYear)
                {
                    for (int i = beginYear.Value; i <= endYear.Value; i++)
                        years.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                            (selectedYear.HasValue && selectedYear.Value == i) ? " selected="selected"" : null);
                }
                else
                {
                    for (int i = beginYear.Value; i >= endYear.Value; i--)
                        years.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                            (selectedYear.HasValue && selectedYear.Value == i) ? " selected="selected"" : null);
                }
    
                daysList.InnerHtml = days.ToString();
                monthsList.InnerHtml = months.ToString();
                yearsList.InnerHtml = years.ToString();
    
                daysListName.InnerHtml =dayLocale;
                monthsListName.InnerHtml =monthLocale ;
                yearsListName.InnerHtml = yearLocale;
                return MvcHtmlString.Create(string.Concat(yearsList, yearLocale, monthsList, monthLocale, daysList, daysListName));
            }
            /// <summary>
            /// Creates a days, months, years drop down list using an HTML select control. 
            /// The parameters represent the value of the "name" attribute on the select control.
            /// </summary>
            /// <param name="html">HTML helper</param>
            /// <param name="dayName">"Name" attribute of the day drop down list.</param>
            /// <param name="monthName">"Name" attribute of the month drop down list.</param>
            /// <param name="yearName">"Name" attribute of the year drop down list.</param>
            /// <param name="beginYear">Begin year</param>
            /// <param name="endYear">End year</param>
            /// <param name="selectedDay">Selected day</param>
            /// <param name="selectedMonth">Selected month</param>
            /// <param name="selectedYear">Selected year</param>
            /// <param name="localizeLabels">Localize labels</param>
            /// <returns></returns>
            public static MvcHtmlString DatePickerDropDowns(this HtmlHelper html,
                string dayName, string monthName, string yearName,
                int? beginYear = null, int? endYear = null,
                int? selectedDay = null, int? selectedMonth = null, int? selectedYear = null, bool localizeLabels = true)
            {
                var daysList = new TagBuilder("select");
                var monthsList = new TagBuilder("select");
                var yearsList = new TagBuilder("select");
    
                daysList.Attributes.Add("name", dayName);
                monthsList.Attributes.Add("name", monthName);
                yearsList.Attributes.Add("name", yearName);
    
                var days = new StringBuilder();
                var months = new StringBuilder();
                var years = new StringBuilder();
    
                string dayLocale, monthLocale, yearLocale;
                if (localizeLabels)
                {
                    var locService = EngineContext.Current.Resolve<ILocalizationService>();
                    dayLocale = locService.GetResource("Common.Day");
                    monthLocale = locService.GetResource("Common.Month");
                    yearLocale = locService.GetResource("Common.Year");
                }
                else
                {
                    dayLocale = "Day";
                    monthLocale = "Month";
                    yearLocale = "Year";
                }
    
                days.AppendFormat("<option value='{0}'>{1}</option>", "0", dayLocale);
                for (int i = 1; i <= 31; i++)
                    days.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                        (selectedDay.HasValue && selectedDay.Value == i) ? " selected="selected"" : null);
    
    
                months.AppendFormat("<option value='{0}'>{1}</option>", "0", monthLocale);
                for (int i = 1; i <= 12; i++)
                {
                    months.AppendFormat("<option value='{0}'{1}>{2}</option>",
                                        i, 
                                        (selectedMonth.HasValue && selectedMonth.Value == i) ? " selected="selected"" : null,
                                        CultureInfo.CurrentUICulture.DateTimeFormat.GetMonthName(i));
                }
    
    
                years.AppendFormat("<option value='{0}'>{1}</option>", "0", yearLocale);
    
                if (beginYear == null)
                    beginYear = CommonHelper.GetDateTimeNow().Year - 100;
                if (endYear == null)
                    endYear = CommonHelper.GetDateTimeNow().Year;
    
                if (endYear > beginYear)
                {
                    for (int i = beginYear.Value; i <= endYear.Value; i++)
                        years.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                            (selectedYear.HasValue && selectedYear.Value == i) ? " selected="selected"" : null);
                }
                else
                {
                    for (int i = beginYear.Value; i >= endYear.Value; i--)
                        years.AppendFormat("<option value='{0}'{1}>{0}</option>", i,
                            (selectedYear.HasValue && selectedYear.Value == i) ? " selected="selected"" : null);
                }
    
                daysList.InnerHtml = days.ToString();
                monthsList.InnerHtml = months.ToString();
                yearsList.InnerHtml = years.ToString();
    
                return MvcHtmlString.Create(string.Concat(daysList, monthsList, yearsList));
            }
    
            public static MvcHtmlString Widget(this HtmlHelper helper, string widgetZone, object additionalData = null)
            {
                return helper.Action("WidgetsByZone", "Widget", new { widgetZone = widgetZone, additionalData = additionalData });
            }
    
            /// <summary>
            /// Renders the standard label with a specified suffix added to label text
            /// </summary>
            /// <typeparam name="TModel">Model</typeparam>
            /// <typeparam name="TValue">Value</typeparam>
            /// <param name="html">HTML helper</param>
            /// <param name="expression">Expression</param>
            /// <param name="htmlAttributes">HTML attributes</param>
            /// <param name="suffix">Suffix</param>
            /// <returns>Label</returns>
            public static MvcHtmlString LabelFor<TModel, TValue>(this HtmlHelper<TModel> html, Expression<Func<TModel, TValue>> expression, object htmlAttributes, string suffix)
            {
                string htmlFieldName = ExpressionHelper.GetExpressionText((LambdaExpression)expression);
                var metadata = ModelMetadata.FromLambdaExpression<TModel, TValue>(expression, html.ViewData);
                string resolvedLabelText = metadata.DisplayName ?? (metadata.PropertyName ?? htmlFieldName.Split(new char[] { '.' }).Last<string>());
                if (string.IsNullOrEmpty(resolvedLabelText))
                {
                    return MvcHtmlString.Empty;
                }
                var tag = new TagBuilder("label");
                tag.Attributes.Add("for", TagBuilder.CreateSanitizedId(html.ViewContext.ViewData.TemplateInfo.GetFullHtmlFieldId(htmlFieldName)));
                if (!String.IsNullOrEmpty(suffix))
                {
                    resolvedLabelText = String.Concat(resolvedLabelText, suffix);
                }
                tag.SetInnerText(resolvedLabelText);
    
                var dictionary = ((IDictionary<string, object>)HtmlHelper.AnonymousObjectToHtmlAttributes(htmlAttributes));
                tag.MergeAttributes<string, object>(dictionary, true);
    
                return MvcHtmlString.Create(tag.ToString(TagRenderMode.Normal));
            }
    
            #endregion
    View Code
  • 相关阅读:
    十分钟了解HTTPS协议
    浅谈程序员的学历
    浅谈前后模板引擎的利与弊
    简单理解预加载技术
    简单理解懒加载技术
    C#.NET里面抽象类和接口有什么区别
    Select count(*)、Count(1)、Count(0)的区别和执行效率比较
    c#中decimal ,double,float的区别
    C#使用log4net记录日志
    SQLServer无法打开用户默认数据库 登录失败错误4064的解决方法
  • 原文地址:https://www.cnblogs.com/niuzaihenmang/p/5626599.html
Copyright © 2011-2022 走看看