【问题标题】:Null form field when sending form with ajax, C# MVC使用ajax,C#MVC发送表单时为空表单字段
【发布时间】:2020-01-22 23:19:03
【问题描述】:

我正在尝试使用$.ajax 将表单中的数据保存到数据库中。问题是当我提交表单时,用户名被保存为null。邮箱和密码保存正确。

function SaveForm() {
  var name = $("#User").val();
  var pwd = $("#Password").val();
  var email = $("#Email").val();
  if (name == "" || pwd == "" || email == "") {
      $("#message1").hide();
      $("#message2").show();
      return false;
  }
  var data =  $("#Registration").serialize();
  $.ajax({
      type: "post",
      data: data,
      url: "/Registration/SaveData",
      success: function (result) {
          $("#message1").show();
          $("#message2").hide();
          $("#Registration")[0].reset();
      }            
  });
}
<div class="modal-body">
  <form id="Registration">
      <div class="form-group">
          <div class="input-group">
              <span class="input-group-addon"><i class="fa fa-user"></i></span>
              <input class="form-control" type="text" name="User" id="User" placeholder="UserName" />
          </div>
      </div>
      <div class="form-group">
          <div class="input-group">
              <span class="input-group-addon"><i class="fa fa-envelope"></i></span>
              <input class="form-control" type="email" name="Email" id="Email" placeholder="Email" />
          </div>
      </div>
      <div class="form-group">
          <div class="input-group">
              <span class="input-group-addon"><i class="fa fa-lock"></i></span>
              <input class="form-control" type="password" name="Password" id="Password" placeholder="Password" />
          </div>
      </div>
  </form>
  <div class="form-group">
      <button class="btn btn-info form-control" type="submit" onclick="SaveForm()"><i class="fa fa-paper-plane"></i>Submit</button>
  </div>
</div>
public JsonResult SaveData(SiteUser model) {
    model.IsValid = false;
    db.SiteUsers.Add(model);
    db.SaveChanges();
    BuildEmailTemplate(model.ID);
    return Json("Registration Successfull", JsonRequestBehavior.AllowGet); 
}

【问题讨论】:

  • SiteUser 模型是什么样子的?
  • 可能您在模型中有用户名,但在您发送名称的表单中。
  • 检查模型类中的属性名称。名称的名称和大小写应在两个位置匹配。 html 中的“用户”应与模型类中的“用户”匹配

标签: javascript c# jquery ajax asp.net-mvc


【解决方案1】:

另一种处理表单值的方法:

function SaveForm() {
  var name = $("#User").val();
  var pwd = $("#Password").val();
  var email = $("#Email").val();

  var json = {
          name:name,
          pwd:pwd,
          email:email
         };

  if (name == "" || pwd == "" || email == "") {
      $("#message1").hide();
      $("#message2").show();
      return false;
  }

  $.ajax({
      type: "post",
      dataType: "json",
      data: {"json": JSON.stringify(json)},,
      url: "@Url.Action("SaveData","Registration")",
      success: function (result) {
          $("#message1").show();
          $("#message2").hide();
          $("#Registration")[0].reset();
      }            
  });
}

你的Controller 看起来像:

using System.Web.Script.Serialization;

[HttpPost]
public JsonResult SaveData(string json) 
{

    var serializer = new JavaScriptSerializer();
    dynamic jsondata = serializer.Deserialize(json, typeof(object));

    //Get your variables here from AJAX call
    var name= jsondata["name"];
    var pwd= jsondata["pwd"];
    var email= jsondata["email"];

    //Set your model here:
    SiteUser model=new SiteUser();
    model.name=name;
    model.pwd=pwd;
    model.email=email;

    //Perform db actions
    db.SiteUsers.Add(model);
    db.SaveChanges();
    BuildEmailTemplate(model.ID);
    return Json("Registration Successfull", JsonRequestBehavior.AllowGet); 
}

【讨论】:

    【解决方案2】:

    您应该添加dataTypecontentType,如下所示。

    $.ajax({
      dataType: 'json',   
      contentType: 'application/x-www-form-urlencoded; charset=UTF-8', 
      type: "post",
      data: $("#Registration").serialize(),
      url: "/Registration/SaveData",
      success: function (result) {
          $("#message1").show();
          $("#message2").hide();
          $("#Registration")[0].reset();
      }            
    });
    

    【讨论】:

    • 我已经尝试过了,但是当我添加 contentType: "application/json; charset=utf-8" 时,它给了我这样的错误:SaveData:1 Failed to load resource : 服务器响应状态为 500 (Internal Server Error)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-26
    • 2013-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多