I'm creating a custom radio button helper using tagbuilder. I'm making use of the steps suggested in the post: Custom helper for generating html tags for radio button and associated label , but have tweaked it a bit to pass the values to the radio button using List , somewhat like this:-
@{
List<SelectListItem> inventory = new List<SelectListItem>();
inventory.Add(new SelectListItem { Text = "True", Value = bool.TrueString, Selected = true });
inventory.Add(new SelectListItem { Text = "False", Value = bool.FalseString});
}
But, even when I select true, it always takes the value as FALSE. Below, is my code for constructing tag builder, please let me know where I'm going wrong:
public static MvcHtmlString CustomRadioButtonFor<TModel>(this HtmlHelper<TModel> htmlHelper, Expression<Func<TModel, bool>> expression, IEnumerable<SelectListItem> radioList)
{
StringBuilder radiobutton = new StringBuilder();
TagBuilder radio = null;
TagBuilder label = null;
string[] propertyNameParts = expression.Body.ToString().Split('.');
string propertyName = propertyNameParts.Last();
string booleanStr = "";
// get the value of the property
Func<TModel, bool> compiled = expression.Compile();
var name = ExpressionHelper.GetExpressionText(expression);
var metadata = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
if (metadata.Model != null)
{
booleanStr = Convert.ToString(compiled(htmlHelper.ViewData.Model));
}
else
booleanStr = string.Empty;
// convert it to a boolean
bool isChecked = false;
Boolean.TryParse(booleanStr, out isChecked);
foreach (SelectListItem item in radioList)
{
radio = new TagBuilder("input");
label = new TagBuilder("label");
label.InnerHtml = item.Text;
radio.Attributes.Add("type", "radio");
radio.Attributes.Add("name", name);
radio.Attributes.Add("value", booleanStr);
radiobutton.Append(label.ToString());
radiobutton.Append(radio.ToString());
}
return MvcHtmlString.Create(radiobutton.ToString());
}
Any help would be appreciated. Thanks in advance!