mvc3从视图重定向和从部分重定向都会导致http 500错误

时间:2012-02-17 06:41:59

标签: asp.net-mvc-3 redirecttoaction

当用户访问我的主页并单击登录按钮时,会弹出包含常规表单的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错误。我已经过了一百遍,我似乎无法弄清楚出了什么问题。数据是正确的。用户名和密码已经过验证,但我从未真正进入Project控制器上的Index操作。

Project Controller中的索引操作存在,它所做的就是返回View()。 Index.cshtml文件确实存在。即使我删除所有模型并使页面尽可能简单,我仍然会遇到同样的问题。保持/ Account / Logon页面上有500错误,而不是将其转到/ Project / Index。

我已经做了一些搜索并且确实发现了一些关于从ajax等重定向的东西...并且说你不应该从部分重定向但是从常规视图中它不起作用。不确定它是否可能是IIS问题?绝对愿意尝试任何事情......在这2天里一直在努力。

谢谢,

1 个答案:

答案 0 :(得分:0)

1)500服务器错误意味着脚本已经抛出错误,这不是像404错误那样的断开链接。所以使用'友好的http错误',这将为您提供更全面的错误描述,以便您可以调试剧本。 2)尝试在Mvc 3中使用Razor语法,如下所示,或在视图上使用强类型。 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>

}