// Copyright (c) Microsoft Corporation. All rights reserved. See License.txt in the project root for license information. using System.Collections.Generic; using System.Web.Mvc; using Microsoft.Internal.Web.Utils; namespace System.Web.WebPages.Html { public partial class HtmlHelper { public IHtmlString RadioButton(string name, object value) { return RadioButton(name, value, htmlAttributes: (IDictionary)null); } public IHtmlString RadioButton(string name, object value, object htmlAttributes) { return RadioButton(name, value, TypeHelper.ObjectToDictionary(htmlAttributes)); } public IHtmlString RadioButton(string name, object value, IDictionary htmlAttributes) { if (String.IsNullOrEmpty(name)) { throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "name"); } return BuildRadioButton(name, value, isChecked: null, attributes: htmlAttributes); } public IHtmlString RadioButton(string name, object value, bool isChecked) { return RadioButton(name, value, isChecked, htmlAttributes: (IDictionary)null); } public IHtmlString RadioButton(string name, object value, bool isChecked, object htmlAttributes) { return RadioButton(name, value, isChecked, TypeHelper.ObjectToDictionary(htmlAttributes)); } public IHtmlString RadioButton(string name, object value, bool isChecked, IDictionary htmlAttributes) { if (name == null) { throw new ArgumentException(CommonResources.Argument_Cannot_Be_Null_Or_Empty, "name"); } return BuildRadioButton(name, value, isChecked, htmlAttributes); } private IHtmlString BuildRadioButton(string name, object value, bool? isChecked, IDictionary attributes) { string valueString = ConvertTo(value, typeof(string)) as string; TagBuilder builder = new TagBuilder("input"); builder.MergeAttribute("type", "radio", true); builder.GenerateId(name); builder.MergeAttributes(attributes, replaceExisting: true); builder.MergeAttribute("value", valueString, replaceExisting: true); builder.MergeAttribute("name", name, replaceExisting: true); if (UnobtrusiveJavaScriptEnabled) { // Add validation attributes var validationAttributes = _validationHelper.GetUnobtrusiveValidationAttributes(name); builder.MergeAttributes(validationAttributes, replaceExisting: false); } var modelState = ModelState[name]; string modelValue = null; if (modelState != null) { modelValue = ConvertTo(modelState.Value, typeof(string)) as string; isChecked = isChecked ?? String.Equals(modelValue, valueString, StringComparison.OrdinalIgnoreCase); } if (isChecked.HasValue) { // Overrides attribute values if (isChecked.Value) { builder.MergeAttribute("checked", "checked", true); } else { builder.Attributes.Remove("checked"); } } AddErrorClass(builder, name); return builder.ToHtmlString(TagRenderMode.SelfClosing); } } }