最开始时候登陆框都是放在主view上面的,然后主view直接用了一个model,然后直接HttpPost去重写了Index()来处理登陆请求(因为index上面就一个form做submit,就没有再单独建Login的action处理)。
然后后面想试着把登陆框放到了分部view去实现登陆后不显示这个登陆框,然后在主view里面去用RenderAction去调用不同的action来处理这个登陆框的显示问题。然后index的post部分没有修改。
但是发现isvalid不起作用了,因为model跑到了分部view里面去了,请问这种情况下主view怎么通过他的actionresult去做isvalid的处理,就是各种errorMessage的打印出来。PS:分部view里面的submit好像还能通过主view index去执行,就是执行的时候error message无法显示到分部view里面了。
请问怎么才能让errormessage能判断和显示出来,需要怎么修改呢?
或者通过登陆状态隐藏或者显示这个登陆框除了分部view还有其他方法吗?
主view:
@{
Html.RenderAction("LoginPanel", "Home");
}
分部view:
@model test.Models.LoginModel
@using (Html.BeginForm("Index", "Home", FormMethod.Post))
{
@Html.TextBoxFor(m => m.account, new { @class = "layui-input", @placeholder = "账号", @autocomplete = "off" })
@Html.ValidationMessageFor(m => m.account, null, new { @style = "color:#ffffff; float:left" })
@Html.TextBoxFor(m => m.password, new { @type = "password", @class = "layui-input", @placeholder = "密码", @autocomplete = "off" })
@Html.ValidationMessageFor(m => m.password, null, new { @style = "color:#ffffff; float:left" })
登陆
@Html.ValidationMessage("Login", new { @style = "color:#ffffff; text-align:left" })
</div>
</div>
HomeController:
[HttpPost]
public ActionResult Index(Models.LoginModel loginModel)
{
if (ModelState.IsValid)
{
//简化的登陆验证过程,后需替换成为sql验证
if (loginModel.account.Equals("user") && loginModel.password.Equals("user"))
{
Session["LoginedUser"] = loginModel.account;
return RedirectToAction("Users", "Home");
}
else
{
ModelState.AddModelError("Login", "用户名或者密码错误!");
}
}
return View();
}
public ActionResult LoginPanel()
{
if (Session["LoginedUser"] == null)
{
return PartialView("ShowLoginPanel");
}
return PartialView("ShowUnlogPanel");
}