BootstrapHelper系列文章目录
一、新增泛型的BootstrapHelper
上篇博主只定义了一个BootstrapHelper的普通类型去继承HtmlHelper,由于考虑到需要使用lamada的方式去定义组件,博主又增加了一个BootstrapHelper的泛型类型。于是BootstrapHelper变成了这样。
namespace BootstrapExtensions
{
public class BootstrapHelper : System.Web.Mvc.HtmlHelper
{
///
/// 使用指定的视图上下文和视图数据容器来初始化 BootstrapHelper 类的新实例。
///
/// <param name="viewContext">视图上下文
/// <param name="viewDataContainer">视图数据容器
public BootstrapHelper(ViewContext viewContext,IViewDataContainer viewDataContainer)
: base(viewContext,viewDataContainer)
{ }
///
/// 使用指定的视图上下文、视图数据容器和路由集合来初始化 BootstrapHelper 类的新实例。
///
/// <param name="viewContext">视图上下文
/// <param name="viewDataContainer">视图数据容器
/// <param name="routeCollection">路由集合
public BootstrapHelper(ViewContext viewContext,IViewDataContainer viewDataContainer,RouteCollection routeCollection)
: base(viewContext,viewDataContainer,routeCollection)
{ }
}
///
/// 表示支持在强类型视图中呈现 Bootstrap 控件。
///
/// <typeparam name="TModel">
public class BootstrapHelper
{
///
/// 使用指定的视图上下文和视图数据容器来初始化 <![CDATA[Net.Web.Mvc.BootstrapHelper
///
/// <param name="viewContext">视图上下文。
/// <param name="viewDataContainer">视图数据容器。
public BootstrapHelper(ViewContext viewContext,viewDataContainer)
{ }
///
/// 使用指定的视图上下文、视图数据容器和路由集合来初始化 <![CDATA[Net.Web.Mvc.BootstrapHelper
///
/// <param name="viewContext">视图上下文。
/// <param name="viewDataContainer">视图数据容器。
/// <param name="routeCollection">路由集合。
public BootstrapHelper(ViewContext viewContext,routeCollection)
{ }
}
}
我们的Bootstrap对象也定义成泛型对象
///
/// 初始化Bootstrap对象
///
public override void InitHelpers()
{
base.InitHelpers();
Bootstrap = new BootstrapHelper
}
public override void Execute()
{
//throw new NotImplementedException();
}
}
这样做的意义就是为了在cshtml页面里面可以使用@Bootstrap.TextBoxFor(x => x.Name)这种写法。这个后面介绍,这里先埋个伏笔。
二、TextBoxExtensions
<div class="jb51code">
<pre class="brush:csharp;">
using System;
using System.Collections.Generic;
using System.Linq;
using System.Linq.Expressions;
using System.Reflection;
using System.Web;
using System.Web.Mvc;
using System.Web.Mvc.Html;
namespace BootstrapExtensions
{
///
/// bootstrap TextBox文本框的所有扩展
///
public static class TextBoxExtensions
{
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="name">表单元素的name属性值
///
public static MvcHtmlString TextBox(this BootstrapHelper html,string name)
{
return InputExtensions.Helper(html,InputType.Text,null,name,false,null);
}
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="id">id
/// <param name="name">表单元素的name属性值
///
public static MvcHtmlString TextBox(this BootstrapHelper html,string id,id,null);
}
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="name">单元素的name属性值
/// <param name="value">表单元素的value值
///
public static MvcHtmlString TextBox(this BootstrapHelper html,string name,object value)
{
return InputExtensions.Helper(html,value,null);
}
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="name">单元素的name属性值
/// <param name="value">表单元素的value值
/// <param name="placeholder">bootstrap自带的文本框的提示输入值
///
public static MvcHtmlString TextBox(this BootstrapHelper html,object value,string placeholder)
{
IDictionary<string,object> attributes = new Dictionary<string,object>();
if (!string.IsNullOrEmpty(placeholder))
{
attributes.Add("placeholder",placeholder);
}
return InputExtensions.Helper(html,attributes);
}
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="name">单元素的name属性值
/// <param name="value">表单元素的value值
/// <param name="htmlAttributes">额外属性
///
public static MvcHtmlString TextBox(this BootstrapHelper html,object htmlAttributes)
{
IDictionary<string,object> attributes = BootstrapHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
return InputExtensions.Helper(html,attributes);
}
///
/// 通过使用指定的 HTML 帮助器和窗体字段的名称,返回文本框标签
///
/// <param name="html">扩展方法实例
/// <param name="name">表单元素的name属性值
/// <param name="value">表单元素的value值
/// <param name="placeholder">bootstrap自带的文本框的提示输入值
/// <param name="htmlAttributes">额外属性
///
public static MvcHtmlString TextBox(this BootstrapHelper html,string placeholder,object> attributes = BootstrapHelper.AnonymousObjectToHtmlAttributes(htmlAttributes);
if (!string.IsNullOrEmpty(placeholder))
{
attributes.Add("placeholder",attributes);
}
public static MvcHtmlString TextBoxFor<TModel,TProperty>(this BootstrapHelper
{
var model = (TModel)html.ViewData.Model;
string propertyName;
object value;
InputExtensions.GetValueByExpression<TModel,TProperty>(expression,model,out propertyName,out value);
return InputExtensions.Helper(html,propertyName,null);
}
}
}