asp.net mvc模型没有收到表单提交

时间:2014-10-17 11:40:04

标签: asp.net asp.net-mvc forms model

我写了一个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; }
    }
}

看到这些结果:

输入:

input

输出本地:

out local

在线主持人输出:

out online

2 个答案:

答案 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的主机上。

希望这个答案对面对这个问题的下一个人有用。

感谢所有回复此帖子的人。