Проверка ASP.NET MVC и представления - PullRequest
4 голосов
/ 26 ноября 2008

Я использую MVC для проверки некоторых текстовых полей HTML на странице, например, в моем контроллере есть

        if (String.IsNullOrEmpty(name))
        {
            ModelState.AddModelError("name", "You must specify a name.");
        }


        if (ViewData.ModelState.IsValid)
        {
            return RedirectToAction("Index");
        }

return View ();

проблема здесь, если проверка завершается неудачно, она не возвращает возвращаемое представление («Добавить»), потому что контроллеры не обрабатывают представления при возвращаемом представлении (), можно использовать RedirectToView («имя представления»); и это будет хорошо работать, за исключением того, что оно не проходит через валидацию AddModelError («это как будто загрузка страницы в первый раз»).

Я могу обойти это, повторив код для заполнения полей SelectList перед возвращением View ();

как это

        ViewData["rooms"] = new SelectList(Villa.intList(10));
        ViewData["sleeps"] = new SelectList(Villa.intList(20));
        ViewData["accomodationType"] = new SelectList(accomodationList, "accomodationId", "accomodationType");
        ViewData["regionName"] = new SelectList(regionList, "regionId", "regionName");
        return View();

, который работает нормально, однако, я думаю, что есть лучший способ, чем повторять этот блок кода, кто-нибудь знает какой-нибудь способ вернуть перенаправленное представление и передать ему ошибки модели?

Заранее спасибо, надеюсь, это имело какой-то смысл.

Ответы [ 2 ]

4 голосов
/ 26 ноября 2008

Возьмите код, который у вас есть для инициализации ViewData в действии (GET) Add, и преобразуйте его (метод извлечения) в автономный частный метод. Вызовите этот метод из вашего действия (GET) Add. Теперь в действии POST (которое, я полагаю, то, что вы показываете выше; это не ясно), вы можете вызвать тот же самый закрытый метод для заполнения ViewData. Теперь у вас больше нет дублированного кода. Помните, что ViewData является свойством типа Controller, поэтому вы можете установить его где угодно, а не только в самом методе действия.

0 голосов
/ 26 ноября 2008

Должен признать, у меня возникла путаница в том, что именно вы имеете в виду, так что это своего рода общий ответ, который может быть неточным!

http://weblogs.asp.net/scottgu/archive/2008/09/02/asp-net-mvc-preview-5-and-form-posting-scenarios.aspx

Это хорошее чтение.

Я могу придумать два пути.

Чтобы изменить наименьшее количество кода, просто поместите ваши ViewData в TempData и после перенаправления получите его.

Вероятно, более приемлемый ответ - использовать метод, описанный в ссылке выше. Отправьте вашу форму на то же действие. Это действие будет иметь две реализации - Post и Get. В действии Post выполните всю логику проверки. Если проверка работает, выполните действие перенаправления для любого представления, которое вы отображаете в случае успеха (шаблон Post-Redirect-Get). Если проверка не пройдена, снова отобразите то же представление формы с отображенными ошибками проверки.

Если это не то, о чем вы спрашиваете, позвольте мне знать ~

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