【发布时间】:2015-05-21 22:15:35
【问题描述】:
我遇到了非常奇怪的行为。我正在创建一个简单的用户创建模块。我创建了一个非常简单的模型,
public class CreateUser
{
[Required]
public string Email { get; set; }
[Required]
[Display(Name = "User name")]
public string Username { get; set; }
[Required]
[StringLength(100, ErrorMessage = "The {0} must be at least {2} characters long.", MinimumLength = 6)]
[DataType(DataType.Password)]
[Display(Name = "Password")]
public string Password { get; set; }
[DataType(DataType.Password)]
[Display(Name = "Confirm Password")]
[Compare("Password", ErrorMessage = "The new password and confirmation password do not match.")]
public string ConfirmPassword { get; set; }
}
当我访问视图时,显示以下异常消息,
System.Web.dll 中出现“System.Web.HttpException”类型的异常,但未在用户代码中处理
附加信息:执行处理程序“System.Web.Mvc.HttpHandlerUtil+ServerExecuteHttpHandlerAsyncWrapper”的子请求时出错。
有时同一页面会出现此异常,
在 mscorlib.dll 中发生“System.StackOverflowException”类型的未处理异常
有时只是这个错误,
System.Web.dll 中出现“System.Web.HttpException”类型的异常,但未在用户代码中处理
我已经隔离了问题,但我无法理解我的观点有什么问题。以下是我的观点,
@model Practice_Project.Models.Accounts.CreateUser
@{
ViewBag.Title = "Register";
}
@using (Html.BeginForm("Register", "Account", FormMethod.Post, new { @class = "validator-form form-horizontal", role = "form" }))
{
<div class="form-group">
<label for="Email" class="col-sm-3">Email</label>
<div class="col-md-9">
<input type="text" class="form-control inputmask" id="Email" name="Email" placeholder="Email">
</div>
</div>
<div class="form-group">
<label for="username" class="col-sm-3">User Name</label>
<div class="col-md-9">
<input type="text" class="form-control inputmask" id="Username" name="Username" placeholder="User Name">
</div>
</div>
<div class="form-group">
<label for="Password" class="col-sm-3">Password</label>
<div class="col-md-9">
<input type="password" class="form-control" id="Password" name="Password" placeholder="Password">
</div>
</div>
<div class="form-group">
<label for="ConfirmPassword" class="col-sm-3">Confirm Password</label>
<div class="col-md-9">
<input type="password" class="form-control" id="ConfirmPassword" name="ConfirmPassword" placeholder="Re-Type your Password">
</div>
</div>
<div class="form-group">
<div class="col-md-7">
<button type="submit" class="btn btn-success" value="Validate">Sign In</button>
<span class="pull-right">
<small>Not Register ?</small>
<span>
<a href="@Html.Action("Register", "Account")" class="btn btn-info">Signup Now</a>
</span>
</span>
</div>
</div>
}
当我从表单中删除最后一段代码时,异常不会发生,
<div class="form-group">
<div class="col-md-7">
<button type="submit" class="btn btn-success" value="Validate">Register</button>
<span class="pull-right">
<small>Already Registered?</small>
<span>
<a href="@Html.Action("Login", "Account")" class="btn btn-info">SignIn Now</a>
</span>
</span>
</div>
</div>
我看不出这段代码有什么问题,删除后错误就消失了。在故障排除选项中提到它可能是由于无限循环,但如何?
编辑: 控制器非常简单,目前只有两种方法,因为我在前进时正在添加。以下是控制器的代码,
[Authorize]
public class AccountController : Controller
{
[AllowAnonymous]
public ActionResult Register()
{
return View();
}
[AllowAnonymous]
public ActionResult Login()
{
return View();
}
}
请注意,我正在尝试在 Register 页面上生成一个链接,该链接导航到 Login 页面。
【问题讨论】:
-
生成这个视图的方法是
AccountController中的Login()方法吗? - 在这种情况下你确实有一个无限循环 -
我们需要渲染视图的控制器动作。
-
您是否在 MVC 操作方法中设置了断点,以查看它是否命中以及命中了多少次?
-
@Stephen Muecke 请在我的问题中查看编辑。生成这个 View 的方法是 Register 方法。我不明白你的意思是“在这种情况下你确实有一个无限循环”。你能解释一下吗?
-
@AdnanYaseen。如果渲染该视图的方法是
Login(),则视图引擎将开始解析视图,点击@Html.Action("Login", "Account")行,再次调用Login()将再次开始解析视图,点击@Html.Action("Login", "Account")行,再次调用Login(),它将再次开始解析视图,依此类推,直到内存不足。
标签: c# asp.net asp.net-mvc