Mvc3 редирект из вида и редирект из частичного и вызывают ошибку HTTP 500 - PullRequest
0 голосов
/ 17 февраля 2012

Когда пользователи посещают мою домашнюю страницу и нажимают кнопку входа, открывается диалоговое окно jquery ui, которое содержит обычную форму.

        @using (Html.BeginForm("LogOn", "Account", FormMethod.Post, new { @name = "user-login-form", @id = "user-login-form" }))
        {
            <fieldset style="margin: 10px 0 0 0;">
                <label for="name">
                    Username</label>
                <input type="text" name="UserName" id="username" class="text ui-widget-content ui-corner-all" />
                <label for="password">
                    Password</label>
                <input type="password" name="password" id="password" value="" class="text ui-widget-content ui-corner-all" />
            </fieldset>
        }

Эта форма существует в частичном представлении, которое является частью представления индекса на домашнем контроллере. Как вы можете видеть, он отправляет сообщение о входе в систему в контроллере учетной записи. Следующее - это действие.

    [HttpPost]
    public ActionResult LogOn(LogOnModel model, string returnUrl) // rename either the model or the view name field to match.
    {
        if (ModelState.IsValid)
        {
            if (MembershipService.ValidateUser(model.UserName, model.Password))
            {
                AuthenticationService.SignIn(model.UserName, model.RememberMe);

                if (Url.IsLocalUrl(returnUrl))
                {
                    return Redirect(returnUrl);
                }

                if (MembershipService.IsUserInRole(model.UserName, "ServiceProvider"))
                {
                    return RedirectToAction("Index", "ServiceProvider");
                }

                return RedirectToAction("Index", "Project");
             }

            ModelState.AddModelError("", "The user name or password provided is incorrect.");
        }

        // If we got this far, something failed, redisplay form
        return View(model);
    }

Как вы видите, если модель недействительна, она отправляет вас в представление LogOn (не частичное), которое является частью контроллера Account.

Проблема в том ... заполняю ли я форму из частичного или обычного вида, так или иначе, на странице / Account / LogOn с ошибкой 500. Я прошел через это сто раз, и я не могу понять, что происходит не так. Данные верны. Имя пользователя и пароль проверены, но я никогда не смогу выполнить действие Index на контроллере проекта.

Индексное действие в контроллере проекта существует, и все, что он делает, это возвращает View (). Файл Index.cshtml существует. Даже если я уберу все модели и сделаю страницу максимально простой, у меня все равно останется та же проблема. Оставаться на странице / Account / Logon с ошибкой 500 вместо того, чтобы перейти к /Project/Index.

Я провел некоторый поиск и нашел кое-что о перенаправлении из ajax и т. Д. И кое-что, говорящее, что вы не должны перенаправлять с частичного, но даже с обычного представления это не работает. Не уверен, что это может быть проблема IIS или что-то? Определенно готов попробовать что-нибудь ... боролся за это в течение 2 дней.

Спасибо

1 Ответ

0 голосов
/ 17 февраля 2012

1) 500 Ошибка сервера означает, что сценарий выдал ошибку, это не битая ссылка, как ошибка 404. Для использования «дружественных ошибок http», это даст вам более полное описание ошибки, чтобы вы могли отладитьсценарий.2) Попробуйте использовать синтаксис Razor в Mvc 3, как показано ниже, или используйте тип Strongly при просмотре.3) Возможно, ваш пароль неверен (это пароль, а не пароль).

@ using (Html.BeginForm ()) {

<div>
    <fieldset>
        <legend>Account Information</legend>
        <div class="editor-label">
            @Html.LabelFor(m => m.UserName)
        </div>
        <div class="editor-field">
            @Html.TextBoxFor(m => m.UserName)
            @Html.ValidationMessageFor(m => m.UserName)
        </div>

        <div class="editor-label">
            @Html.LabelFor(m => m.Password)
        </div>
        <div class="editor-field">
            @Html.PasswordFor(m => m.Password)
            @Html.ValidationMessageFor(m => m.Password)
        </div>


        <p>
            <input type="submit" value="Log On" />
        </p>
    </fieldset>
</div>

}

...