Я создаю собственный помощник по переключателям, используя tagbuilder. Я использую шаги, предложенные в сообщении: Пользовательский помощник для создания html-тегов для переключателя и связанной с ним метки , но немного изменил его, чтобы передавать значения переключателю с помощью List , примерно так: -
@{
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});
}
Но даже когда я выбираю true, он всегда принимает значение FALSE. Ниже приведен мой код для создания построителя тегов, пожалуйста, дайте мне знать, где я ошибаюсь:
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());
}
Любая помощь будет оценена по достоинству. Заранее спасибо!
SelectList
вашему пользовательскому помощнику. Вы не понимаете, как создаватьHtmlHelper
методы расширения, в частности, как создать правильную двустороннюю привязку модели, и я настоятельно рекомендую вам изучить исходный код, прежде чем идти дальше - person   schedule 27.05.2016StringBuilder html = new StringBuilder(); html.Append(htmlHelper.RadioButtonFor(expression, true, new { id = "yes" })); // add label plus other radio button and label // return MvcHtmlString.Create(html .ToString());
(6 строк кода плюс любые другие элементы, такие как вложенные элементы div и т. д.) - person   schedule 27.05.2016HtmlHelper
(он выводит 2 радиокнопки и 2 связанные с ним метки), но вы делаете это, используя встроенные методы для создания каждой части его html. И я уже дал вам ссылки на исходный код. - person   schedule 28.05.2016