2013-04-26 2 views
1

У меня действительно возникают проблемы с сохранением состояния моего флажка в моем приложении mvc4. Я пытаюсь отправить его значение до моей логики контроллера и обновить список в моей модели на основе данного значения, прежде чем отправить модель обратно в представление с новыми значениями. Учитывая, что мой флажок является функцией «показать отключенные элементы в списке», мне нужно, чтобы он включался и выключался. Я видел так много различных решений, но я не могу показаться, чтобы заставить их работать :(Как сохранить состояние щелчка флажка в asp.net

Вот часть моего зрения:

@model MyProject.Models.HomeViewModel 

<div class="row-fluid"> 
    <div class="span12"> 
     <div class="k-block"> 
      <form action="~/Home/Index" name="refreshForm" method="POST"> 
       <p>Include disabled units: @Html.CheckBoxFor(m => m.Refresh)</p> 
       <input type="submit" class="k-button" value="Refresh" /> 
      @* KendoUI Grid code *@ 
     </div> 
    </div> 

HomeViewModel:

public class HomeViewModel 
{ 
    public List<UnitService.UnitType> UnitTypes { get; set; } 
    public bool Refresh { get; set; } 
} 

HomeViewController потребуется некоторое рефакторинга, но это будет новая задача

[HttpPost] 
public ActionResult Index(FormCollection formCollection, HomeViewModel model) 
{ 
    bool showDisabled = model.Refresh; 

    FilteredList = new List<UnitType>(); 
    Model = new HomeViewModel(); 
    var client = new UnitServiceClient(); 
    var listOfUnitsFromService = client.GetListOfUnits(showDisabled); 

    if (!showDisabled) 
    { 
     FilteredList = listOfUnitsFromService.Where(unit => !unit.Disabled).ToList(); 
     Model.UnitTypes = FilteredList; 

     return View(Model); 
    } 

    FilteredList = listOfUnitsFromService.ToList(); 
    Model.UnitTypes = FilteredList; 

    return View(Model); 
} 
+1

Очистите код до наименьшего возможного тестового примера, и это облегчит его просмотр. Ex. «TmpList» нигде не определен. –

+0

Теперь отредактируйте этот пост, когда я его обработаю. Просто нужно некоторое время, чтобы очистить его. –

ответ

1

Вы вернуть Model на ваш взгляд, поэтому ваши объекты Model будут заполнены, но ваше значение флажка не входит в вашу модель! Решение состоит в том, чтобы покончить с FormCollection целиком и добавить флажок модели вида:

public class HomeViewModel 
{ 
    ... // HomeViewModel's current properties go here 
    public bool Refresh { get; set; } 
} 

На ваш взгляд:

@Html.CheckBoxFor(m => m.Refresh) 

В контроллере:

[HttpPost] 
public ActionResult Index(HomeViewModel model) 
{ 
    /* Some logic here about model.Refresh */ 
    return View(model); 
} 

В качестве В отличие от этого, я не вижу причин, по которым вы хотели бы добавить это значение в сеанс, как и сейчас (если в коде, который вы опубликовали, нет ничего очевидного.

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