Значение флажка MVC3 не сбрасывается - PullRequest
2 голосов
/ 08 февраля 2012

У меня довольно простой вид бритвы, который необходимо использовать для вопросника, который используется несколько раз, пока не заканчиваются вопросы.Флажок используется для выбора ответов, проблема в том, что когда я впервые отправляю форму, когда следующий набор вопросов вернул ответы, которые я отправляю в первый раз, они сохраняются на второй странице.Для простоты я сократил программу следующим образом:

Модель,

public class CheckBoxItemDto
{
    public int Id { get; set; }

    public bool Selected { get; set; }
}

public class CheckBoxModel
{
    public CheckBoxModel()
    {
        Dtos = new List<CheckBoxItemDto>();
    }

    public IList<CheckBoxItemDto> Dtos { get; set; }
}

Контроллер,

public class CheckBoxController : Controller
{
    public ViewResult Index()
    {
        CheckBoxModel model = new CheckBoxModel();
        for (int i = 0; i < 5; i++)
        {
            model.Dtos.Add(new CheckBoxItemDto(){Id = i,Selected = true});   
        }
        return View(model);
    }

    [HttpPost]
    public ViewResult Index(CheckBoxModel mdl)
    {
        CheckBoxModel model = new CheckBoxModel();
        for (int i = 5; i < 10; i++)
        {
            model.Dtos.Add(new CheckBoxItemDto() { Id = i, Selected = i % 2 == 0 });
        }
        return View(model);
    }
}

Вид,

@model CheckBoxTest.Models.CheckBoxModel

@{
    ViewBag.Title = "ViewPage1";
}

<h2>ViewPage1</h2> 
@using (Html.BeginForm())
{
for (int i = 0; i < Model.Dtos.Count; i++)
{
    @Html.DisplayFor(m => m.Dtos[i].Id)
    @Html.DisplayFor(m => m.Dtos[i].Selected)
    @Html.CheckBoxFor(m => m.Dtos[i].Selected)
    <br/>
}
<input type="submit" value="Index" /> 
}  

В представлении после публикации значения столбцов DisplayFor и CheckBoxFor различаются.Но должно быть то же самое.

Ответы [ 2 ]

10 голосов
/ 08 февраля 2012

По звуку, ваш ModelState все еще сохраняет свои предыдущие значения, когда вы возвращаете вид.Попробуйте очистить ModelState в вашем посте:

ModelState.Clear();
CheckBoxModel model = new CheckBoxModel();
...
1 голос
/ 08 февраля 2012

В вашем методе действия Index, который запускается для POST, ASP.Net MVC ожидает, что результирующее представление отобразит ошибки проверки.Поэтому метод HTML Helper CheckBoxFor просматривает ModelState перед Model, поэтому он может отображать «недопустимое» значение для пользователя.

Если вы не используете действие View from POST для отображения ошибок, вы можете очистить ModelState как Dangerous предлагает .Или вы можете использовать шаблон «Post-Redirect-Get»: в вашем методе действия POST отобразить то же представление, если есть ошибки, или перенаправить в представление GET, которое отображает что-то еще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...