2011-12-30 2 views
3

Учитывая У меня есть объект модели, как ...MVC 3, радио кнопки и модели

public class MyModel 
{ 
    public int SomeProperty { get; set; } 
    public int SomeOtherProperty { get; set; } 

    public IList<DeliveryDetail> DeliveryDetails { get; set; } 
} 

public DeliveryDetail 
{ 
    public string Description { get; set; } 
    public bool IsSelected { get; set; } 
} 

и я передать его через к виду, как это ...

// Controller 
public ActionResult Index() 
{ 
    MyModel myModel = Factory.CreateModelWithDeliveryDetails(x); 
    return View(myModel); 
} 

Как бы я визуализировать/связывать набор переключателей (в представлении)? Используя следующий код не отправляете данные обратно:

@foreach(var deliveryDetail in @Model.DeliveryDetails) 
{ 
    @deliveryDetail.Description 
    @Html.RadioButtonFor(x => deliveryDetail, false) 
} 

ответ

8

Выбор в списке переключателей является взаимоисключающим. Вы можете выбрать только одно значение. Поэтому привязка списка переключателей к свойству типа IEnumerable не имеет никакого смысла. Вероятно, вам нужно адаптировать свою модель представления к требованиям представления (которое в вашем случае отображает список переключателей, где можно сделать только один выбор). Если бы вы использовали список флажков, привязка к свойству IEnumerable имела бы смысл, поскольку вы могли бы проверить несколько флажков.

Итак, давайте адаптировать модель представления к этой ситуации:

Модель:

public class MyModel 
{ 
    public string SelectedDeliveryDetailId { get; set; } 
    public IList<DeliveryDetail> DeliveryDetails { get; set; } 
} 

public class DeliveryDetail 
{ 
    public string Description { get; set; } 
    public int Id { get; set; } 
} 

Контроллер:

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var model = new MyModel 
     { 
      DeliveryDetails = new[] 
      { 
       new DeliveryDetail { Description = "detail 1", Id = 1 }, 
       new DeliveryDetail { Description = "detail 2", Id = 2 }, 
       new DeliveryDetail { Description = "detail 3", Id = 3 }, 
      } 
     }; 
     return View(model); 
    } 

    [HttpPost] 
    public ActionResult Index(MyModel model) 
    { 
     // Here you will get the id of the selected delivery detail 
     // in model.SelectedDeliveryDetailId 
     ... 
    } 
} 

Вид:

@model MyModel 

@using (Html.BeginForm()) 
{ 
    foreach (var deliveryDetail in Model.DeliveryDetails) 
    { 
     @deliveryDetail.Description 
     @Html.RadioButtonFor(x => x.SelectedDeliveryDetailId, deliveryDetail.Id) 
    } 
    <button type="submit">OK</button> 
} 
1

Вам нужно еще одно свойства для публикуемых значений ::

public class MyModel 
{ 
    public int SomeProperty { get; set; } 
    public int SomeOtherProperty { get; set; } 

    public IList<DeliveryDetail> DeliveryDetails { get; set; } 

    public DeliveryDetail SelectedDetail { get; set; } 
} 

И ввиду:

@foreach(var deliveryDetail in @Model.DeliveryDetails) 
{ 
    @deliveryDetail.Description 
    @Html.RadioButtonFor(x => x.SelectedDetail, deliveryDetail) 
} 

Для того, чтобы это работа DeliveryDetail должна быть Enum.

Смежные вопросы