Skip to content

Instantly share code, notes, and snippets.

@yicone
Created July 15, 2013 08:52
Show Gist options
  • Save yicone/5998472 to your computer and use it in GitHub Desktop.
Save yicone/5998472 to your computer and use it in GitHub Desktop.
public static class CheckBoxExtensions
{
public static MvcHtmlString CheckBoxFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, int>> expression, int value)
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}
ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression<TModel, int>(expression, htmlHelper.ViewData);
string modelName = ExpressionHelper.GetExpressionText(expression);
TagBuilder tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttribute("type", "checkbox", true);
tagBuilder.MergeAttribute("name", modelName, true);
tagBuilder.MergeAttribute("value", value.ToString(), true);
if (modelMetadata.Model != null && (int)modelMetadata.Model == value)
{
tagBuilder.MergeAttribute("checked", "checked", true);
}
return new MvcHtmlString(tagBuilder.ToString());
}
public static MvcHtmlString CheckBoxFor<TModel, T>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, T>> expression, string value) where T : struct
{
if (expression == null)
{
throw new ArgumentNullException("expression");
}
ModelMetadata modelMetadata = ModelMetadata.FromLambdaExpression<TModel, T>(expression, htmlHelper.ViewData);
string modelName = ExpressionHelper.GetExpressionText(expression);
TagBuilder tagBuilder = new TagBuilder("input");
tagBuilder.MergeAttribute("type", "checkbox", true);
tagBuilder.MergeAttribute("name", modelName, true);
tagBuilder.MergeAttribute("value", value.ToString(), true);
if (modelMetadata.Model != null && (modelMetadata.Model.ToString() == EnumHelper.GetEnumByKey(typeof(T), value).ToString()))
{
tagBuilder.MergeAttribute("checked", "checked", true);
}
return new MvcHtmlString(tagBuilder.ToString());
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment