0

JavaScript を使用せずにサーバーに投稿する必要があるフォームがあります。これを行うには、フォームを送信し、必要なパラメーターを解析するためのモデルを作成します。

私が持っているものの 1 つは、RadioButtons のテーブルです。

つまり、いくつかの行を持つテーブルがあり、各行にはラジオボタンのあるいくつかの列があります。各行のラジオボタンは同じリストに属します。つまり、各行で 1 つのオプションを選択できますが、複数の行を選択できます (例: 行 1 でラジオボタン 2 を選択し、行 2 で RB 3 を選択できますが、行 1 で RB2 を選択することはできません)。行 1 の RB3 -ただし、RB をチェックせずに行を残すことはできます)。

モデルがこのラジオボタンのテーブルを解析できるようにするために使用できるデータ構造はありますか? RadioButtonFor とプロパティの名前を使用できないことがわかりました。これは、すべてのラジオボタンが同じリストに属しているためです (そして、全体で 1 つのオプションしか選択できません)。私が理解している限り、MVCはその属性を介して各フォーム要素を解析するため、それらが同じプロパティに属していることをプログラムに知らせる方法がわかりません。

ありがとう。

4

1 に答える 1

1

をお勧めしDictionary<int, List<SelectListItem>>ます。ディクショナリの int キーは行番号になり、List は各ラジオ ボタン グループのオプションになります。

「RadioButtonListFor」ヘルパーを使用して、SelectListItems のコレクションをラジオ ボタン グループに変換します (以下のコード)。ビューでは、このコードを変更して、個々のラジオ ボタンの周りのテーブル セルに配置します。おそらく、この関数にラッピング HTML ブロックのパラメーターを追加できます。

// 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());
        }
于 2013-02-19T16:39:47.170 に答える