我将在这里假设您需要呈现一个动态生成的单选按钮列表,其中 1 由用户选择......
您的服务器端代码(在 Controller Action 方法中,或者更好的是,在 ViewModel 道具/方法中)应该返回一个IEnumerable<SelectListItem>
. 该列表中的每个项目都将具有由您的代码设置的 Text 和 Value 属性,这些属性foreach
来自您的实际数据源。
我更喜欢使用“胖”视图模型,所以所有工作都在模型类中完成,而不是在控制器中。您可以创建它IEnumerable<SelectListItem>
并将其放入 ViewBagViewBag.NameChoices = GetSelectItemsFromDataWhatever();
中,就像在您的控制器中一样。
在您的视图中,您可以使用以下扩展方法将 SelectItems 列表绑定到等效的 ASP:RadioButtonList:
// jonlanceley.blogspot.com/2011/06/mvc3-radiobuttonlist-helper.html
public static MvcHtmlString RadioButtonListFor<TModel, TProperty>(this HtmlHelper<TModel> htmlHelper,
Expression<Func<TModel, TProperty>> expression, IEnumerable<SelectListItem> listOfValues)
{
var metaData = ModelMetadata.FromLambdaExpression(expression, htmlHelper.ViewData);
var sb = new StringBuilder();
sb.Append("<span class='RadioButtonListFor'> ");
if (listOfValues != null)
{
// Create a radio button for each item in the list
foreach (SelectListItem item in listOfValues)
{
// Generate an id to be given to the radio button field
var id = string.Format("{0}_{1}", metaData.PropertyName, item.Value);
// Create and populate a radio button using the existing html helpers
var htmlAttributes = new Dictionary<string, object>();
htmlAttributes.Add("id", id);
if (item.Selected)
htmlAttributes.Add("checked", "checked");
var radio = htmlHelper.RadioButtonFor(expression, item.Value, htmlAttributes);
// Create the html string that will be returned to the client
// e.g. <label<input data-val="true" data-val-required="You must select an option" id="TestRadio_1" name="TestRadio" type="radio" value="1" />Line1</label>
sb.AppendFormat("<label>{0} {1}</label> ", radio, HttpUtility.HtmlEncode(item.Text));
}
}
sb.Append(" </span>");
return MvcHtmlString.Create(sb.ToString());
}
并将其绑定到您的视图中:
@Html.RadioButtonListFor(model => model.SelectedName, ViewBag.NameChoices)
您的模型将需要一个“SelectedName”道具才能使上述内容生效,该道具将绑定到回发时选定的单选按钮。