0

我有一个 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"/>

而不是实际的单选按钮。

请帮助我。

4

2 回答 2

0

You would define this in the associated view for the action. Within the view, you can use the Html helper method 'RadioButtonFor' method that will build the html for you given an appropriate list. You can find more details on the specific method on MSDN.

于 2012-12-27T19:48:01.693 回答
0

我将在这里假设您需要呈现一个动态生成的单选按钮列表,其中 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”道具才能使上述内容生效,该道具将绑定到回发时选定的单选按钮。

于 2012-12-27T20:03:12.153 回答