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

ここでは、動的に生成されたラジオボタンのリストをレンダリングする必要があると仮定します。ユーザーは1つを選択します。

サーバー側のコード(Controller Actionメソッド内、またはさらに良いことに、ViewModelの小道具/メソッド内)は、を返す必要がありIEnumerable<SelectListItem>ます。foreachそのリストの各アイテムには、実際のデータソースからのある種のコードによって設定されたTextプロパティとValueプロパティがあります。

私は「fat」ViewModelsを使用することを好みます。そのため、すべての作業は、コントローラーではなく、Modelクラスで行われます。それを作成しIEnumerable<SelectListItem>て、コントローラーのようにViewBagにスローすることができViewBag.NameChoices = GetSelectItemsFromDataWhatever();ます。

ビューでは、次の拡張メソッドを使用して、SelectItemのリストを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 に答える
0

これは、アクションに関連付けられたビューで定義します。ビュー内で、適切なリストを指定して HTML を構築する Html ヘルパー メソッド 'RadioButtonFor' メソッドを使用できます。特定の方法の詳細については、MSDN を参照してください。

于 2012-12-27T19:48:01.693 に答える