C# 网站MVC对象
我试图在用户登录后创建一个成员页面。我的登录功能工作正常,但我无法接收视图的成员信息。在视图上使用断点时,我接收的模型对象为null。MemberInfo方法返回ActionResult对象,您不使用该对象 试试这个代码C# 网站MVC对象,c#,asp.net,C#,Asp.net,我试图在用户登录后创建一个成员页面。我的登录功能工作正常,但我无法接收视图的成员信息。在视图上使用断点时,我接收的模型对象为null。MemberInfo方法返回ActionResult对象,您不使用该对象 试试这个代码 [HttpPost] public ActionResult Index(Models.customer cs ) { if(isValid(cs.email, cs.password)) { Session["user
[HttpPost]
public ActionResult Index(Models.customer cs )
{
if(isValid(cs.email, cs.password))
{
Session["user"] = cs.email;
FormsAuthentication.SetAuthCookie(cs.email, false);
customer c = customerEntity.customers.Single(e => e.email == cs.email);
return MemberInfo(c);
}
ModelState.AddModelError(string.Empty, "Authentication Failed");
return View(cs);
}
下面是我创建的一个要点,它作为一个例子,说明在MVC中成功进行身份验证之后,您可能会做什么
using System.Web.Mvc;
using AuthDemo.Models;
using AuthDemo.ViewModels;
namespace AuthDemo.Controllers {
public class LoginController : Controller {
[HttpGet]
public ActionResult Index() {
LoginViewModel viewModel = new LoginViewModel();
return View("Index", viewModel);
}
[HttpPost]
public ActionResult Logon(LoginRequest loginRequest) {
// The default model binder has already performed basic validation against the request, so we check against that
ActionResult result = null;
if (ModelState.IsValid) {
// Continue with login
// Perform some back-end user validation
bool isValidLogin = false;
// var isValidUser = this.MembershipRepository.ValidateUser(loginRequest);
// TODO: perform operations based on the boolean. For now, we pretend it's true
isValidLogin = true;
if (isValidLogin) {
Session["user"] = new UserModel() {
FirstName = "Clara",
LastName = "Oswald",
Email = "oswin@thetardis.com",
Id = 5
};
FormsAuthentication.SetAuthCookie(Session["user"].Email, false);
result = RedirectToRoute("MemberHome"); // Landing page for authenticated users.
} else {
// The user wasn't found in the repository
LoginViewModel viewModel = new LoginViewModel();
viewModel.LogOnRequest = loginRequest;
viewModel.LogOnResponse.Successful = false;
viewModel.Messages.Add("Could not find the user specified.");
viewModel.LogOnRequest.Attempts += 1;
result = View("Index", viewModel);
}
} else {
// Login failed
LoginViewModel viewModel = new LoginViewModel(); // Build a new instance of the view model so we can show validation errors
viewModel.LogOnRequest = loginRequest;
viewModel.LogOnResponse.Successful = false;
viewModel.LogOnRequest.Attempts += 1;
viewModel.Messages.Add("Invalid login");
result = View("Index", viewModel);
}
return result;
}
}
}
在上面的登录控制器中,我有两个操作,一个用于登录的初始Get请求,另一个用于POST
行动后有3种可能的行动方案:
重定向路由
功能将在设置属性值后将用户带到适当的位置
一旦进入MemberController
,就不需要有请求参数,因为用户没有执行post,而是从成功登录重定向而来。在这种情况下,我们只需加载从登录保存的数据,并执行其他需要执行的操作,如下所示:
using System.Web.Mvc;
using AuthDemo.Models;
namespace AuthDemo.Controllers {
public class MemberController : Controller {
//
// GET: /Member/
[Authorize]
public ActionResult Index() {
UserModel user = (UserModel)this.Session["user"];
return View("Index", user);
}
}
}
希望这是有意义的,并且可以消除任何困惑。您的设置似乎不太正确。您的
模型。客户
模型将自动绑定到HTTP请求。如果您在登录时使用该模型(您说该模型正在工作),那么它取决于名为电子邮件
和密码
的表单输入字段。您的成员页面很可能没有这些字段,因此模型绑定器无法构建您的模型。我将尝试添加一个答案来说明这一点它不会传递适当的查询字符串,以便MemberInfo(Models.customer em)
上的模型绑定器能够创建模型,因此它将为空。先前的呼叫MemberInfo(c)
您几乎只是调用一个方法并丢弃该值代码>则它不会重定向到另一个页面,即它不会更改URL,它只会执行操作方法并返回相关视图。返回重定向到操作(“SomeAction”)
将返回301重定向到浏览器,并将其重定向到“SomeAction”,因此浏览器URL将更改。您的意思是在成功登录后尝试重定向到MemberInfo视图吗?操作结果不应返回null。。。曾经您将如何告知登录失败?在索引正文中返回MemberInfo的操作结果无法解决此问题。它保留在登录页面上,而不是重定向MemberInfo方法的视图@迪马恐怖2。检查模型的名称空间。(我也有过相同类名的案例)3。查看页面模型为null,但未引发NullReferenceException?