我在显示视图时遇到问题。我正在创建一个链接 @ Html.ActionLink(“以用户身份添加”,“注册”,“帐户”)
但是当我点击它时,我收到了这条消息:
无法找到资源。 说明:HTTP 404.您要查找的资源(或其中一个依赖项)可能已被删除,名称已更改或暂时不可用。请查看以下网址,确保拼写正确。
请求的网址:/帐户/注册
以下是我的观点:
@model ContactWeb.Models.SimpleUser
@{
ViewBag.Title = "CreateUser";
}
<h2>Create User</h2>
@using (Html.BeginForm()) {
@Html.ValidationSummary(true);
<fieldset>
<legend>Create User</legend>
<div>
@Html.LabelFor(c=>c.Username, "User Name")
@Html.TextBoxFor(c=>c.Username)
@Html.ValidationMessageFor(c=>c.Username)
</div>
<div>
@Html.LabelFor(c=>c.Password, "Password")
@Html.TextBoxFor(c=>c.Password)
@Html.ValidationMessageFor(c=>c.Password)
</div>
<div>
@Html.LabelFor(c=>c.ConfirmPassword, "Confirm Password")
@Html.TextBoxFor(c=>c.ConfirmPassword)
@Html.ValidationMessageFor(c=>c.ConfirmPassword)
</div>
<p>
<input type="submit" value="Register" />
</p>
</fieldset>
}
<div>
@Html.ActionLink("Back to List", "List")
</div>
我的控制器是
[HttpPost]
public ActionResult Register(RegisterModel model)
{
if (ModelState.IsValid)
{
// Attempt to register the user
MembershipCreateStatus createStatus;
Membership.CreateUser(model.UserName, model.Password, null, null, null, true, null, out createStatus);
if (createStatus == MembershipCreateStatus.Success)
{
FormsAuthentication.SetAuthCookie(model.UserName, false);
return RedirectToAction("List", "Contact");
}
else
{
ModelState.AddModelError("", "The username or password provided is incorrect.");
}
}
// If we got this far, something failed, redisplay form
return View(model);
}
答案 0 :(得分:2)
您确实需要为初始GET请求重载Register
方法,但它不应该包含任何参数:
[HttpGet]
public ActionResult Register()
{
return View(new RegisterModel());
}
[HttpPost]
public ActionResult Register(RegisterModel model)
{
// your existing implementation here that
// checks ModelState and creates the user record
}
这将允许在首次加载/Account/Register
网址时显示包含空/默认值的表单。这将阻止“已经定义了具有相同参数类型的方法”,从而允许代码进行编译。另外,我认为你会发现这对于只有一个没有Register
属性的HttpPost
方法是有利的,因为它允许你有一个单独的POST方法来实现回发逻辑,以及一个更简单的GET-只有初始显示的方法。您甚至可以自定义仅限GET的显示,以使用某些初始值等填充模型/视图。
答案 1 :(得分:1)
您的register
操作采用[HttpPost]
属性修饰,这意味着该操作可以处理仅 HTTP POST请求。普通链接发出GET请求,因为没有GET处理程序,你得到404 - 找不到。要解决此问题,请创建另一个将处理GET请求的操作
[HttpGet]
public ActionResult Register()
{
return View();
}
此操作将返回页面,上面有注册表单。