Короткий verion: требуется ViewUserControl (т. Е. Форма входа в систему), чтобы отправлять сообщения в self и иметь возможность перенаправлять (т. Е. При успешном логин) или вернуть исходный вид (т. е. Home/Index) с сводкой проверки и не вмешиваться в другие ViewUserControls на странице.Как я могу инкапсулировать форму/сообщение/проверку [/ redirect] в ViewUserControl в ASP.Net MVC 2
Кроме того, HomeController/Index должен иметь минимальное знание внутренней работы входа в систему. В идеале, Html.RenderAction («Вход», «Пользователь») или аналогичный, это все, что требуется.
На данный момент застрял в перенаправлении, давая «Действиям ребенка не разрешено выполнять действия перенаправления». Я знаю почему, но задаюсь вопросом, есть ли способ, или иначе я должен это делать.
Детали того, что я пытаюсь достичь:
- encapsulate a Login (or any) Form to be reused across site
- post to self
- when Login/validation fails, show original page with Validation Summary
- (some might argue to just post to Login Page and show Validation Summary there; if what I'm trying to achieve isn't possible, I will just go that route)
- when Login succeeds, redirect to /App/Home/Index
- also, want to:
- stick to PRG principles
- avoid ajax
- keep Login Form (UserController.Login()) as encapsulated as possible; avoid having to implement HomeController.Login() since the Login Form might appear elsewhere
Все, но редирект работы. Мой подход до сих пор был:
Home/Index
includes Login Form:<%Html.RenderAction("Login","User");%>
User/Login ViewUserControl<UserLoginViewModel>
includes:
using(Html.BeginForm()){}
- includes hidden form field
"userlogin"="1"
public class UserController : BaseController {
...
[AcceptPostWhenFieldExists(FieldName = "userlogin")]
public ActionResult Login(UserLoginViewModel model, FormCollection form){
if (ModelState.IsValid) {
if(checkUserCredentials()) {
setUserCredentials()
return this.RedirectToAction<Areas.App.Controllers.HomeController>(x => x.Index());
}
else {
return View();
}
}
...
}
прекрасно работает, когда: ModelState или учетные данные пользователя не в состоянии - вернуть View() не уступает Home/Index и отображает резюме соответствующих проверки.
(у меня есть Регистр формы на той же странице, используя ту же самую структуру резюме проверки Каждая форма показывает только тогда, когда эта форма представляется.).
Сбой при: ModelState и учетные данные пользователя действительно - RedirectToAction < >() дает следующую ошибку:
«Действия ребенка не могут выполнять перенаправленные действия».
Похоже, что в классические ASP-дни это было бы решено с помощью Response.Buffer=True
. Есть ли эквивалентная настройка или обходной путь сейчас?
Btw, бег: ASP.Net MVC 4, 2, VS 2010, Dev/Отладка веб-сервера
Я надеюсь, что все это имеет смысл.
Итак, какие у меня варианты? Или где я ошибаюсь в своем подходе? ТИА!
эти две другие сообщения охватывают связанные проблемы, но решения не работают или не соответствуют моим критериям (если это возможно): http://stackoverflow.com/questions/2056421/why-are -redirect-results-not-allowed-in-child-actions-in-asp-net-mvc-2 http://stackoverflow.com/questions/2022182/render-action-return-view-form-problem – paul