当用户访问我的主页并单击登录按钮时,会弹出包含常规表单的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天里一直在努力。
谢谢,
答案 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>
}