我写了一个asp.net mvc网站,在本地工作正常。 但是在发布之后,我对从表单发送的模型有一些问题。 我认为这决定了我的模型状态始终无效。 我没有收到任何数据!
[HttpGet]
public ActionResult LogIn()
{
return View();
}
[HttpPost]
public ActionResult LogIn(Models.LoginViewModel data)
{
if (!ModelState.IsValid)
{
return LogIn();
}
TAPortalEntities db = new TAPortalEntities();
UserAccount probableUser = db.UserAccounts.FirstOrDefault(p => p.UserName == data.UserName && p.Pass == data.Pass);
if (probableUser == null)
{
ModelState.AddModelError(string.Empty, "نام کابری یا رمز عبور اشتباه وارد شده است!");
return LogIn();
}
Session["LogedIn"] = true;
Session["UserName"] = probableUser.UserName;
Session["Course"] = probableUser.Course.Name;
Session["TeacherName"] = probableUser.Course.TeacherName;
Session["RealName"] = probableUser.RealName;
return RedirectToAction("Index", "Home");
}
并且视图是这样的:
@model TAPortal.Models.LoginViewModel
@{
ViewBag.Title = "ورود به سایت";
}
<h2>ورود</h2>
@using (Html.BeginForm())
{
@*@Html.AntiForgeryToken()*@
<div class="form-horizontal">
<h4>اطلاعات ورود را وارد کنید</h4>
<hr />
@Html.ValidationSummary(true)
<div class="form-group">
@Html.LabelFor(model => model.UserName, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.UserName)
@Html.ValidationMessageFor(model => model.UserName)
</div>
</div>
<div class="form-group">
@Html.LabelFor(model => model.Pass, new { @class = "control-label col-md-2" })
<div class="col-md-10">
@Html.EditorFor(model => model.Pass)
@Html.ValidationMessageFor(model => model.Pass)
</div>
</div>
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="ورود" class="btn btn-default" />
</div>
</div>
</div>
}
<div>
@Html.ActionLink("برگشت به خانه", "Index","Home")
</div>
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
和模型类:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.ComponentModel.DataAnnotations;
namespace TAPortal.Models
{
public class LoginViewModel
{
[Required(ErrorMessage="نام کاربری باید وارد شود!")]
[Display(Name="نام کاربری")]
public string UserName { get; set; }
[Required(ErrorMessage = "رمز عبور باید وارد شود!")]
[Display(Name = "رمز عبور")]
public string Pass { get; set; }
}
}
看到这些结果:
输入:
输出本地:
在线主持人输出:
答案 0 :(得分:1)
尝试添加此过滤器
[ValidateAntiForgeryToken]
到你的POST动作
编辑:
在你的get方法中实例化你的模型并将ValidationSummary
设置为false [HttpGet]
public ActionResult LogIn()
{
var model = new LoginViewModel();
return View(model);
}
答案 1 :(得分:0)
现在我有了答案。 我分享给面临这个问题的其他人。
从一开始,每件事都是正确的,但错误的是我的主机.NET框架的版本。这种类型的编码需要.NET framework 4.5,但我的主机的.NET框架版本是4.0,这就是故事。
现在我已将我的代码转移到4.5的主机上。
希望这个答案对面对这个问题的下一个人有用。
感谢所有回复此帖子的人。