1

我正在学习一个新创建的默认简单 MVC4 Web 项目。

在索引页面中,我有一个链接供用户使用他的帐户登录网站。之后,他将被重定向到一个表单以输入新名称、新密码。

我已准备好使用此表单进行验证[Required]。但是一旦重定向页面完全加载,这些控件(用户名和密码)也完成了验证(Field needs be filled in)。

这是用户使用他的帐户登录后的POST代码

if (ModelState.IsValid && WebSecurity.Login(model.UserName, model.Password, persistCookie: model.RememberMe))
{
    return RedirectToCreateUser(returnUrl);
}

// If we got this far, something failed, redisplay form
ModelState.AddModelError("", "The user name or password provided is incorrect.");
return View(model);

这是方法 RedirectToCreateUser

private ActionResult RedirectToCreateUser(string url)
{
    if (Url.IsLocalUrl(url))
    {
        return Redirect(url);
    }
    else
    {
        return RedirectToAction("CreateNewUser", "Account");
    }
}

最后是用于 http GET 的 CreateNewUser 方法

public ActionResult CreateNewUser(CreateNewUserModel model)
{         
    return View(model);
}

还有一个我认为尚未访问的http POST。

[HttpPost]
public ActionResult CreateNewUser(CreateNewUserModel model, string url)
{
    if (ModelState.IsValid)
    {
        // Attempt to register the user
        try
        {
            WebSecurity.CreateUserAndAccount(model.UserName, model.Password, null, true);
            WebSecurity.Login(model.UserName, model.Password);
            return RedirectToAction("CreateUserSuccess", "Account");
        }
        catch (MembershipCreateUserException e)
        {
            ModelState.AddModelError("", ErrorCodeToString(e.StatusCode));
        }
    }
    else
    {
    }
    return View(model);
}
4

2 回答 2

0

你的问题在这里

最后是用于 http GET的 CreateNewUser 方法

public ActionResult CreateNewUser(CreateNewUserModel model)
{         
    return View(model);
}

您不能将对象作为参数传递给 get 请求。可能该签名应该是

public ActionResult CreateNewUser()
{    
    var model = new CreateNewUserModel();     
    return View(model);
}

或类似的东西

于 2013-02-04T16:01:25.467 回答
0

CreateNewUser操作正在触发[HttpPost]并尝试使用无效(空)凭据进行发布。

您需要使用以下方法添加一些内容[HttpGet]

[HttpGet]
public ActionResult CreateNewUser(CreateNewUserModel model)
{         
    return View(model);
}
于 2013-02-04T15:26:25.397 回答