帐户注册不工作ASP.NET MVC

时间:2011-12-03 20:19:59

标签: asp.net-mvc asp.net-mvc-3

我在显示视图时遇到问题。我正在创建一个链接 @ 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);
    }    

2 个答案:

答案 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();
}   

此操作将返回页面,上面有注册表单。