Нулевое поле формы при отправке формы с ajax, C# MVC - PullRequest
0 голосов
/ 23 января 2020

Я пытаюсь сохранить данные в базе данных из формы с $.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); 
}

Ответы [ 2 ]

0 голосов
/ 24 января 2020

Альтернативный способ обработки значений для вашей формы:

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); 
}
0 голосов
/ 23 января 2020

Вы должны добавить dataType & contentType, как показано ниже.

$.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();
  }            
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...