2015-12-09 3 views
1

У меня возникла проблема с привязкой моего RadioButtonFor к действию моего постконтроллера. Смотри ниже.RadioButtonFor не обязательный с частичным видом

Главная Просмотр - вызываем действие, чтобы загрузить частичный вид и окружающие его с формой

@using (Html.BeginForm("FilterPlaceInPriorPosition", "Placements", FormMethod.Post)) 
{ 
    @Html.Action("AdvancedSearch", "Home", new { Area = "Common", advancedSearchModel = Model.AdvancedSearch }) 
} 

AdvancedSearch Частичный контроллер Действие

public ActionResult AdvancedSearch(AdvancedSearch advancedSearchModel) 
    { 

     return PartialView("_AdvancedSearch", advancedSearchModel); 
    } 

Частичный вид - _AdvancedSearch. cshtml

@model AdvancedSearch 
<div class="row"> 
     <div class="col-sm-4"> 
      @Html.TextBoxFor(model => model.Search, new { @class = "form-control no-max-width" }) 
     </div> 
     <div class="col-sm-8"> 

       @Html.RadioButtonFor(model => model.MyActiveStudents, true, new {Name = "studentTypeRadio"}) <label for="MyActiveStudents">My active students</label> 

       @Html.RadioButtonFor(model => model.AllActiveStudents, true, new {Name = "studentTypeRadio"}) <label for="AllActiveStudents">All active students</label> 

     </div> 
    </div> 

действие контроллера Проводка класс -FilterPlaceInPriorPosition

[HttpPost] 
     public ActionResult FilterPlaceInPriorPosition(AdvancedSearch filter) 
     { 
      return RedirectToAction("PlaceInPriorPosition", filter); 
     } 

AdvancedSearch.cs

public class AdvancedSearch 
{ 
    public bool MyActiveStudents { get; set; } 
    public bool AllActiveStudents { get; set; } 

Если вы посмотрите на изображении вы можете увидеть, что текст текстового поля связывает более, но две радиокнопок не. debugging results image

ответ

0

Вы явно меняете атрибут имени радиовходов. Затем значение будет отправлено обратно на studentTypeRadio, неMyActiveStudents или AllActiveStudents. Поскольку на вашей модели нет ничего такого, значение просто отбрасывается.

Вместо этого вы должны иметь что-то вроде:

public class AdvancedSearch 
{ 
    public bool OnlyMyActiveStudents { get; set; } // default will be `false` 
} 

Затем в парциальное:

@Html.RadioButtonFor(m => m.OnlyMyActiveStudents, true, new { id = "MyActiveStudents" }) 
<label for="MyActiveStudents">My active students</label> 

@Html.RadioButtonFor(m => m.OnlyMyActiveStudents, false, new { id = "AllActiveStudents" }) 
<label for="AllActiveStudents">All active students</label> 

Кроме того, FWIW, используя детское действие здесь бессмысленно. Если все, что вам нужно сделать, это передать экземпляр на частичный вид, вы можете сделать это только с Html.Partial без всех ненужных накладных ребенка действия:

@Html.Partial("_AdvancedSearch", Model.AdvancedSearch) 
+0

Есть ли способ, чтобы иметь один атрибут имя для более чем 2 переключателя? В будущем у меня будет больше, чем то, что я перечислил. Например, я добавлю дополнительные кнопки для большей фильтрации. Мне нужны радиостанции, которые являются разными именами свойств, но являются частью одной и той же группы. @Igor – Jimmy

+0

@Jimmy, я бы предположил, что вы используете enum вместо свойства bool. http://stackoverflow.com/questions/18542060/mvc4-enum-and-radio-button-list – ataravati

+0

@Jimmy - группа радиообъектов с таким же именем представляет собой несколько взаимоисключающих значений одного и того же свойства. В модели вам нужно только одно свойство для этого. Он может быть логическим (если есть только два возможных значения), целое число, перечисление, строка. – Igor

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