net netcore2 netcore3 HtmlHelper扩展(checkboxlistfor)为例

.net中以扩展CheckBoxListFor为例

     public static MvcHtmlString CheckBoxListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> items, object htmlAttributes)
        {
            var result = new StringBuilder();
            string name = ExpressionHelper.GetExpressionText(expression);
            var modelData = ModelMetadata.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData).Model;
            List<string> currentValues = StringHelper.StringSplit<string>(modelData == null ? string.Empty : modelData.ToString());
            foreach (var item in items)
            {
                if (currentValues.Contains(item.Value))
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\" checked><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
                else
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\"><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
            }
            return MvcHtmlString.Create(result.ToString());
        }

netcore 2中以扩展CheckBoxListFor为例

    public static IHtmlContent CheckBoxListFor<TModel, TProperty> (this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> items, object htmlAttributes)
        {
            var result = new StringBuilder();
            string name = ExpressionHelper.GetExpressionText(expression);
            var modelData = ExpressionMetadataProvider.FromLambdaExpression<TModel, TProperty>(expression, htmlHelper.ViewData, htmlHelper.MetadataProvider).Model;
            List<string> currentValues = StringHelper.StringSplit<string>(modelData == null ? string.Empty : modelData.ToString());
            foreach (var item in items)
            {
                if (currentValues.Contains(item.Value))
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\" checked><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
                else
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\"><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
            }
            return new HtmlString(result.ToString());
        }

  

netcore 3中以扩展CheckBoxListFor为例

     public static IHtmlContent CheckBoxListFor<TModel, TProperty> (this IHtmlHelper<TModel> htmlHelper, Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> items, object htmlAttributes)
        {
            var result = new StringBuilder();
            ModelExpressionProvider modelExpressionProvider = (ModelExpressionProvider)htmlHelper.ViewContext.HttpContext.RequestServices.GetService(typeof(IModelExpressionProvider));
            var modelData = modelExpressionProvider.CreateModelExpression(htmlHelper.ViewData, expression).Model;
            var name=modelExpressionProvider.GetExpressionText(expression);

            List<string> currentValues = ((modelData == null) ? string.Empty : modelData.ToString()).Split<string>(Array.Empty<string>());

            foreach (var item in items)
            {
                if (currentValues.Contains(item.Value))
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\" checked><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
                else
                    result.AppendFormat("<label class=\"checkbox-inline checkbox-styled\"><input type=\"checkbox\" name=\"{0}\" value=\"{1}\"><span class=‘text‘>{2}</span></label>", name, item.Value, item.Text);
            }
            return new HtmlString(result.ToString());
        }

  

原文地址:https://www.cnblogs.com/zzxulong/p/12174575.html

时间: 2024-11-06 13:31:51

net netcore2 netcore3 HtmlHelper扩展(checkboxlistfor)为例的相关文章

[转]ASP.NET MVC HtmlHelper扩展之Calendar日期时间选择

本文转自:http://blog.bossma.cn/asp_net_mvc/asp-net-mvc-htmlhelper-calendar-datetime-select/ 这里我们扩展HtmlHelper,就像它包含在ASP.NET MVC中一样,扩展方法使我们能为已有的类添加方法.这里使用了一个日期时间选择控件:My97DatePicker,需要添加到网站中,并在页面中引用. 先看看是怎么扩展的: ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18

HtmlHelper扩展

扩展 HtmlHelper类 public static class MyHtmlHelper { //扩展方法 //静态类,静态方法,this关键字 //调用方法<%=Html.MyLabel("这是我的扩展的方法") %> //一般扩展方法所在的类要和扩展类型的命名空间搞成一致.比如这里扩展的是HtmlHelper,所以把namespace MVC4_lx.Models改成namespace System.Web.Mvc;就可以通过HtmlHelper来调用扩展的方法了

asp.net MVC添加HtmlHelper扩展示例和用法

一.先创建一个HtmlHelper的扩展类,代码: using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Web.Mvc; namespace Practice.Helper { public static class MvcHelper { public static string SayHello(this HtmlHelper htmlHelper,

Yii2.0 手动添加扩展 redis为例

手动下载yii2-redis扩展包(https://github.com/yiisoft/yii2-redis )并解压 将解压后的文件移至/vebdor/yiisoft命名为yii2-redis 打开/vebdor/yiisoft下的extensions.php 添加如下代码 'yiisoft/yii2-redis' => array ( 'name' => 'yiisoft/yii2-redis', 'version' => '2.0.5.0', 'alias' => arra

《设计模式之禅》--单例扩展:多例模式

需求:一个类只能产生两三个对象 public class Emperor { //定义最多能产生的实例数量 private static int maxNumOfEmperor = 2; //每个皇帝都有名字,使用一个ArrayList来容纳,每个对象的私有属性 private static ArrayList<String> nameList = new ArrayList<String>(); //定义一个列表,容纳所有的皇帝实例 private static ArrayLis

自定义HtmlHelper扩展方法

核心:通过TagBuilder类实现Html元素的创建 TagBuilder: 前台调用: @Html.Messger("tag","span-tag", @ViewData["messge"]) 最终生成: <span id="tag" class="span-tag">@ViewData["messge"]</span> 原文地址:https://www.cn

ASP.Net MVC开发基础学习笔记(2):HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: 1 <input name="UserName&q

[asp.net mvc 奇淫巧技] 03 - 枚举特性扩展解决枚举命名问题和支持HtmlHelper

一.需求 我们在开发中经常会遇到一些枚举,而且这些枚举类型可能会在表单中的下拉中,或者单选按钮中会用到等. 这样用是没问题的,但是用过的人都知道一个问题,就是枚举的命名问题,当然有很多人枚举直接中文命名,我是不推荐这种命名规则,因为实在不够友好. 那有没有可以不用中文命名,而且可以显示中文的方法呢.答案是肯定的. 二.特性解决枚举命名问题 那就是用特性解决命名问题,这样的话既可以枚举用英文命名,显示又可以是中文的,岂不两全其美. /// <summary> /// 性别 /// </su

ASP.Net MVC开发基础学习笔记:二、HtmlHelper与扩展方法

一.一个功能强大的页面开发辅助类—HtmlHelper初步了解 1.1 有失必有得 在ASP.Net MVC中微软并没有提供类似服务器端控件那种开发方式,毕竟微软的MVC就是传统的请求处理响应的回归.所以抛弃之前的那种事件响应的模型,抛弃服务器端控件也理所当然. 但是,如果手写Html标签效率又比较低,可重用度比较低.这时,我们该怎样来提高效率呢?首先,经过上篇我们知道可以通过ViewData传递数据,于是我们可以写出以下的Html代码: <input name="UserName&quo