Как сделать так, чтобы одна группа RadioButtons отображалась в EditorTemplates в ASP.Net MVC (3) - PullRequest
4 голосов
/ 26 августа 2011

У меня есть список элементов, из которых я хочу, чтобы пользователь мог ввести какое-то значение, выберите один Но переключатели, созданные с помощью EditorTemplate, названы как «Item [x] .SelectedItemId», поэтому они полностью независимы друг от друга, и я не могу получить значение ...

Давайте покажем код. Модель:

public class FormModel
{
    public List<ItemModel> Items { get; set; }
    public int SelectedItemId { get; set; }
}

public class ItemModel
{
    public int ItemId { get; set; }
    public string ItemName { get; set; }
    public string SomeString { get; set; }
}

Мнение:

@model FormModel
@using (Html.BeginForm())
{ 
    @Html.EditorFor(m => m.Items)
}

Шаблон редактора:

@model ItemModel
@Html.RadioButton("SelectedItemId", Model.ItemId)
@Model.ItemName <br/>
@Html.TextBoxFor(m => m.SomeString) <br/>

UPDATE

Вот что я хочу:

What I want

Вот что я получаю:

what I get

В результате FormModel.SelectedItemId никогда не получает значение какой-либо радиокнопки.

Что я делаю не так?

Ответы [ 2 ]

3 голосов
/ 17 апреля 2012

Похоже, что вы знаете, что установка одинаковых имен для радиокнопок необходима для их работы. Однако, когда вы делаете это в шаблоне редактора с использованием строки кода @Html.RadioButton("SelectedItemId", Model.ItemId), MVC 3 будет учитывать, что вы находитесь в шаблоне редактора для Items и добавляете элементы [n].

Это создаст имя что-то вроде name="Items[0].SelectedIndex". Это было бы хорошо, если бы не тот факт, что следующая радиокнопка будет `name =" Items [1] .SelectedIndex ".

Один из способов решить эту проблему - не использовать шаблон редактора и использовать вместо него цикл foreach. Вот код, который мне удалось получить работоспособным. Я подтвердил, что привязка модели работает для SelectedIndex.

    @model FormModel

    @{
        ViewBag.Title = "Index";
    }

    @using (Html.BeginForm())
    {
        foreach (var item in Model.Items)
        {
            @Html.RadioButtonFor(x => x.SelectedItemId, item.ItemId)
            @item.ItemName <br/>
            @Html.TextBoxFor(m => item.ItemName) <br/>
        }

        <input type="submit" value = "submit" />
    }
1 голос
/ 26 сентября 2012

У меня была такая же проблема, и мы решили ее с помощью этого куска кода.

@Html.RadioButton("", Model.Id, Model.Selected, new { Name = "deliveryMethod" })

Вам нужно явно указать свойство Name, чтобы оно использовалось вместо имени, которое вы получите после выполнения EditorFor.

...