你不能用 ASP.NET Membership Provider 做这种事情,即写自定义更新到表。
如果就这么简单,那么会有更少的人遇到问题/问题。 =)
甚至不必费心将 ASP.NET 成员 SQL 表添加到您的 EDMX 中 - 您不会知道这些关系或这些表是如何真正协同工作的。忘记尝试将其表示为“模型”。
我的建议是不要尝试将 MembershipProvider 作为模型绑定(即不要创建强类型视图),只需直接从控制器调用 Membership 方法即可。
这是我们开始错过 Web 窗体的“拖放”的地方,不能放在 ChangePassword 控件上。 =)
您最好的选择是创建一个常规视图(非强类型),然后将常规按钮发布到您的控制器方法。
不要尝试将对象作为模型传递,获取Request.Form集合中的字段。
[HttpPost]
public ActionResult ChangePassword()
{
string userName = Request.Form["userName"];
string passWord = Request.Form["passWord"];
MembershipProvider.ChangePassword(userName, password);
return View("ChangePasswordSuccess");
}
上面的代码(大致)相当于传递一个强类型的 User 对象,更改密码并调用 UpdateModel。
当然,您可以实现自己的会员提供程序,但我不认为实现自定义提供程序只是为了让您的代码“更容易”应该是驱动程序,因为除非编码正确(这不是容易做到),您会损害我们认为理所当然的 ASP.NET 成员资格提供程序的许多内置安全功能和丰富的帐户管理选项。