Не удалось получить правильное логическое значение из SelectListItem в пользовательской радиокнопке

Я создаю собственный помощник по переключателям, используя 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());
        }

Любая помощь будет оценена по достоинству. Заранее спасибо!


person Newbie    schedule 27.05.2016    source источник
comment
Это безумие, с какой стати вам вообще нужно передавать SelectList вашему пользовательскому помощнику. Вы не понимаете, как создавать HtmlHelper методы расширения, в частности, как создать правильную двустороннюю привязку модели, и я настоятельно рекомендую вам изучить исходный код, прежде чем идти дальше   -  person    schedule 27.05.2016
comment
Поскольку я имею в виду подход, предложенный 20fingers2brains.blogspot.com/2013/04/. Как видите, здесь используется SelectList. Можете ли вы предложить обходной путь к ЭТОМУ ??   -  person Newbie    schedule 27.05.2016
comment
Этот блог - ерунда. Ваш помощник должен быть просто - StringBuilder 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.2016
comment
Да, это нормально. Но на самом деле я хотел избежать использования встроенных методов htmlhelper, таких как (htmlHelper.RadioButtonFor(..)), которые предоставляются MVC, и вместо этого создать свою собственную версию htmlhelper для переключателя. Можете ли вы предложить какие-либо ссылки, на которые я должен ссылаться, или какой подход я должен использовать для этого.   -  person Newbie    schedule 27.05.2016
comment
Ты серьезно? Вы явно не понимаете, что делаете, основываясь на этом и вашем предыдущий вопрос.   -  person    schedule 27.05.2016
comment
Уточните, что. Почему бы вам не использовать встроенные методы, которые делают это правильно. Весь код в этом и ваших предыдущих вопросах показывает, что вы не понимаете основ привязки модели. Вы серьезно хотите сделать веб-сайт, который не будет работать?   -  person    schedule 27.05.2016
comment
Мне нужно создать собственные помощники html, и я не хочу использовать встроенные методы, предоставляемые MVC. Это было моей единственной целью все это время. Не могли бы вы предложить какие-либо ресурсы или ссылки, на которые я мог бы сослаться или изучить, чтобы реализовать это?   -  person Newbie    schedule 27.05.2016
comment
Я думаю, вы просто не понимаете. Вы составляете собственный метод расширения HtmlHelper (он выводит 2 радиокнопки и 2 связанные с ним метки), но вы делаете это, используя встроенные методы для создания каждой части его html. И я уже дал вам ссылки на исходный код.   -  person    schedule 28.05.2016