net netcore2 netcore3 HtmlHelper扩展(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());

}

上一篇:AI落地进入Hard模式!氪皮肤不如氪装备,拼算法不如拼高质量数据


下一篇:北京小伙用AI修复100年前的京城老视频爆火网络,作者:7天完成,颜色还有不足