在MVC中从服务器端创建页面上的单选按钮

时间:2012-12-27 19:42:57

标签: c# asp.net-mvc-3

我有一个get方法,其中有一个名称列表。

Public ActionResult GetlistOfNames()
{
    listofPersons = SomeListOfGuys;
    // i want to display this as a radiobutton on the clientside
}

我该怎么做?

我面临的问题是,当我尝试这样做时,我会在div下获得文本,如

<input id="name" type="radio" name="Personname"/>

而不是实际的radiobuttons。

请帮助我。

2 个答案:

答案 0 :(得分:0)

您可以在操作的关联视图中定义此内容。在视图中,您可以使用Html辅助方法'RadioButtonFor'方法,在给定适当列表的情况下为您构建html。您可以找到有关特定方法on MSDN.

的更多详细信息

答案 1 :(得分:0)

我将在此假设您需要渲染动态生成的单选按钮列表,其中1由用户选择....

您的服务器端代码(在Controller Action方法中,或者更好的是,在ViewModel道具/方法中)应返回IEnumerable<SelectListItem>。该列表中的每个项目都将根据您的代码设置其文本和值属性,以及来自实际数据源的某种foreach

我更喜欢使用'胖'ViewModel,因此所有工作都在Model类中完成,而不是在控制器中完成。您只需创建IEnumerable<SelectListItem>并将其放入ViewBag中,如ViewBag.NameChoices = GetSelectItemsFromDataWhatever();,就在您的控制器中。

在View中,您可以使用以下扩展方法将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'的支柱,以便上面的工作,它将被绑定到回发上选定的单选按钮。