Захват свойств модели представления после отправки формы

У меня строго типизированное представление, использующее созданную мной модель представления. У меня есть поле даты в моей модели просмотра, которое представляет собой форматированное отображение свойства моей основной модели. В действии POST Edit (я следовал руководству по ужину для ботаников) параметры int id, FormCollection collection. Используя свой репозиторий, я ищу модель по идентификатору, и мне остается захватить мои дополнительные свойства модели представления с помощью FormCollection. Должен быть способ лучше? Может быть, просто измените параметры, чтобы принять мою модель просмотра вместо int id? Почему на ужине ботаников это не делается вместо того, чтобы полагаться на UpdateModel ()? Моя UpdateModel неверна из-за того, что не подбирает свойства модели представления и не обновляет их соответствующим образом?

Пример ниже. ValidateInput (false) для моего редактора WYSIWYG

[Authorize(Roles = "Author,Admin"), HttpPost, ValidateInput(false)]
public virtual ActionResult Edit(int id, FormCollection collection)
{
    Spotlight spotlight = spotlightRepository.GetSpotlight(id);

    try
    {
        spotlight.ModifiedDate = DateTimeOffset.Now;
        // I dont like this line
        spotlight.PublishDate = Convert.ToDateTime(collection["PublishDate"]);
        UpdateModel(spotlight, "Spotlight");

        spotlightRepository.Save();

        return RedirectToAction("Details", new { id = spotlight.SpotlightID });
    }
    catch
    {
        ModelState.AddRuleViolations(spotlight.GetRuleViolations());

        return View(new SpotlightFormViewModel(spotlight));
    }
}

person ryan    schedule 07.09.2010    source источник


Ответы (1)


public virtual ActionResult Edit(int id, FormCollection collection, Spotlight s)

так что вам вернут ваш объект прожектора.

spotlight.PublishDate = s.PublishDate;

однако datetime может быть проблемой, поскольку у вас есть модель с DateTime. Я всегда использую FlatSpotlight, где все int и Datetimes являются строками, которые затем можно легко сопоставить с помощью Automapper на объект Spotlight после проверки модели, конечно.

person Stefanvds    schedule 07.09.2010