net netcore2 netcore3 HtmlHelper扩展(checkboxlistfor)为例

简介: net HtmlHelper扩展(checkboxlistfor)为例 netcore2 IHtmlHelper扩展(checkboxlistfor)为例 netcore3 IHtmlHelper扩展(checkboxlistfor)为例

.net中以扩展CheckBoxListFor为例
public static MvcHtmlString CheckBoxListFor(this HtmlHelper htmlHelper, Expression> expression, IEnumerable 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 (this IHtmlHelper htmlHelper, Expression> expression, IEnumerable 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 (this IHtmlHelper htmlHelper, Expression> expression, IEnumerable 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());

}

相关文章
|
监控 安全 API
Docker + .NET API:简化部署和扩展
Docker + .NET API:简化部署和扩展
268 1
|
监控 安全 API
最完美的扩展Docker + .NET API:简化部署和扩展
最完美的扩展Docker + .NET API:简化部署和扩展
375 0
|
数据库
分享一个 .NET EF 6 扩展 Where 的方法
分享一个 .NET EF 6 扩展 Where 的方法
237 0
|
开发框架 程序员 API
【C#】.net core2.1,通过扩展状态代码页方法对404页面进行全局捕抓并响应信息
在开发一个网站项目时,除了异常过滤功能模块,还需要有针对404不存在的api接口和页面处理功能 本篇文章就来讲讲,如何自定义全局请求状态类来统一处理
|
SQL 存储 XML
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法
ASP.NET Core 实战:基于 Dapper 扩展你的数据访问方法 一、前言 在非静态页面的项目开发中,必定会涉及到对于数据库的访问,最开始呢,我们使用 Ado.Net,通过编写 SQL 帮助类帮我们实现对于数据库的快速访问,后来,ORM(Object Relational Mapping,对象关系映射)出现了,我们开始使用 EF、Dapper、NHibernate,亦或是国人的 SqlSugar 代替我们原来的 SqlHelper.cs。
4679 0
|
SQL 前端开发 .NET
Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货)
原文:Asp.net 面向接口可扩展框架之数据处理模块及EntityFramework扩展和Dapper扩展(含干货) 接口数据处理模块是什么意思呢?实际上很简单,就是使用面向接口的思想和方式来做数据处理。
1434 0