Извлечь данные, которые только что были сохранены в базу данных, используя только одну кнопку - PullRequest
1 голос
/ 10 июня 2019

Я создаю свою собственную маркетинговую воронку для своего сайта.Как получить идентификатор записи, которую я только что сохранил в своем вызове ajax, без необходимости использования каких-либо дополнительных кнопок или методов, запускаемых пользователем.

Я создал модальный режим, который отображается после того, как пользователь регистрирует свои данные нанаша система как способ взаимодействия системы с пользователем.В любом случае, начиная с этой стадии, пользователю должно быть задано несколько вопросов об их предпочтениях и продуктах, которые они хотят.В моей голове это просто означает, что я должен обновлять информацию этого пользователя в ту минуту, когда появляется первый модал.

Ajax-вызов для сохранения информации о пользователе:

$("#btn-save-client").click(function () {
    var clientData = {
        id: $('#id').val(),
        firstName: $('#FirstName').val(),
        lastName: $('#LastName').val(),
        cellNo: $('#CellNo').val(),
        emailAddress: $('#EmailAddress').val(),
        country: $('#Country').val()
    };
    $.ajax({
        type: "POST",
        url: '/Home/SaveClientData',
        data: JSON.stringify(clientData), //Serialises the form's elements.
        contentType: "application/json",
        dataType: "json",
        beforeSend: function () {
            $("#contactForm").append('<div class="overlay"><span class="fa fa-refresh fa-spin"></span></div>');
        },
        success: function (data) {
            $("#contactForm .overlay").remove();
            $("#contactForm")[0];
            LoadFirstFunnel(data.id);
        },
        error: function (error) {
            console.log(error);
            console.log(error.responseText);
            alert(error.responseText);
        },
        completed: function () {
            $("#contactForm .overlay").remove();
        }
    });
});

C # метод для сохранения в HomeController.cs:

[System.Web.Mvc.HttpPost]
public ActionResult SaveClientData([FromBody]ClientData clientDataModel)
{
   if (clientDataModel == null) return new JsonResult(new {id = null, error = "Please fill in all the details required."});

   var _addClientData = new HomeTransactions(new PetaConnection().db()).SaveClient(clientDataModel);
   return new JsonResult(new { id = _addClientData.id, error = null });
}

Из моего HomeController.cs мой код переходит к следующему коду для сохранения данных в базе данных, а затем возвращает значения:

public string SaveClient(ClientData clientDataModel)
{
   try
   {
      ClientInfo clientModel = new ClientInfo();
      ClientCompanyInfo clientCompanyModel = new ClientCompanyInfo();
      if (clientModel.id == 0 && clientCompanyModel.id == 0)
      {
         clientCompanyModel.CompanyName = "Default Inc.";
         _connect.Save(clientCompanyModel);
         Random rand = new Random();
         int randomNo = rand.Next(10000, 20000);
         string referenceNo = "MTP-" + randomNo;
         clientModel.ReferenceNo = referenceNo;
         clientModel.FirstName = clientDataModel.FirstName;
         clientModel.LastName = clientDataModel.LastName;
         clientModel.CellNo = clientDataModel.CellNo;
         clientModel.EmailAddress = clientDataModel.EmailAddress;
         clientModel.Country = clientDataModel.Country;
         clientModel.companyId = clientCompanyModel.id;
         clientModel.Active = 1;
         clientModel.DateAdded = DateTime.Now;
         clientModel.DateUpdated = DateTime.Now;
         _connect.Save(clientModel);
         clientDataModel.id = clientModel.id;
       }
       return clientModel.id.ToString();
     }
     catch (Exception ex)
     {
        throw;
     }
}

Ajax-вызов для LoadFirstFunnel упоминается в предыдущем Ajax-вызове.

function LoadFirstFunnel(clientId) {
    $.ajax({
        type: "POST",
        url: '/Home/_OpenFirstPanelModal',
        data: { clientId: clientId }, // serializes the form's elements.
        beforeSend: function (data) {
            $("#MessageBoxModal").append('<div class="overlay"><span class="fa fa-refresh fa-spin"></span></div>');
        },
        success: function (data) {
            id = data.id;
            $("#MessageBoxModal  .overlay").remove();
            $('#MessageBoxModal .modal-title').html('Your information was successfully added.');
            $('#MessageBoxModal .btn-style-one').attr('id', 'btn-notification');
            $('#MessageBoxModal .btn-style-one').attr('id', 'btn-deny-note');
            $('#MessageBoxModal .btn-style-one').attr('data-id', '');
            $('#MessageBoxModal #regNote').html(data);
            $('#MessageBoxModal .modal-dialog').css('width', '');
            $('#MessageBoxModal').modal({
                backdrop: 'static',
                keyboard: false,
                show: true
            });

        },
        error: function (xhr, status, error) {

            $("#MessageBoxModal  .overlay").remove();
            alert(error);
        },
        completed: function (data) {
            $("#MessageBoxModal .overlay").remove();
        }
    });
};

C # вызов HomeController.cs, который отвечает на ajax-вызов LoadFirstFunnel:

public ActionResult _OpenFirstPanelModal(int clientId)
{
   ClientInfo _openClientInfoModel = new ClientInfo();
   _openClientInfoModel = new HomeTransactions(new PetaConnection().db()).OpenClientInfo(clientId);
   return PartialView("_OpenFirstPanelModal", _openClientInfoModel);
}

Modal.cshtml, который появляется после регистрации:

@model MotseThePowerHouse_Website.Models.ClientInfo
<div class="row">
    <input type="hidden" value="@Model.id" name="id" />
    <div class="text-muted text-center col-sm-12" id="msgDisplay">
        <h4>Some text here...</h4>
        <h4>Some text here...</h4>
    </div>
</div>
<div class="row">
    <a id="btn-notification" data-id="@Model.id" class="theme-btn btn-style-one">Yes, notify me</a>
    <a id="btn-deny-note" data-id="@Model.id" class="theme-btn btn-style-one">No, thank you</a>
</div>

Я знаю, что все это перемешано и не работает, хотя логика может иметь смысл, я хочу знать о других методах, которые я могу использовать для доставки этого воронкообразного вывода.

Ниже моя модель ClientInfo:

using System;

namespace MotseThePowerHouse_Website.Models
{
    public class ClientInfo
    {
        public int id { get; set; }
        public string ReferenceNo { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string UnitNo { get; set; }
        public string UnitStreetName { get; set; }
        public string ComplexNo { get; set; }
        public string ComplexName { get; set; }
        public string StreetName { get; set; }
        public string Suburb { get; set; }
        public string City { get; set; }
        public string PostalCode { get; set; }
        public string Province { get; set; }
        public string Country { get; set; }
        public string CellNo { get; set; }
        public string TelephoneNo { get; set; }
        public string EmailAddress { get; set; }
        public string Website { get; set; }
        public string BlogNotification { get; set; }
        public int companyId { get; set; }
        public string PositionHeld { get; set; }
        public string OfficeLocation { get; set; }
        public DateTime DateAdded { get; set; }
        public string UpdatedBy { get; set; }
        public DateTime DateUpdated { get; set; }
        public int Active { get; set; }
    }
}

1 Ответ

0 голосов
/ 12 июня 2019

Создайте класс, который будет представлять ваше тело запроса:

public class ClientData
{
    public string FirstName {get;set;}
    public string LastName {get;set;}
    public string CellNo {get;set;}
    public string EmailAddress {get;set;}
    public string Country {get;set;}
}

Измените свой SaveClientData метод следующим образом:

[HttpPost]
public ActionResult SaveClientData([FromBody]ClientData clientData)
{
    if (clientDataModel == null) return Json(new {error = "Please fill in all the details required."}, JsonRequestBehavior.AllowGet);

     var _addClientData = new HomeTransactions(new PetaConnection().db()).SaveClient(clientDataModel);
     return Json(new {id = _addClientData}, JsonRequestBehavior.AllowGet);
}

и ваш код JavaScript:

var clientData = {
  firstName : $('#FirstName').val(),
  lastName: $('#LastName').val(),
  cellNo: $('#CellNo').val(),
  emailAddress: $('#EmailAddress').val(),
  country: $('#Country').val()
}


 $.ajax({
    ...
    data: JSON.stringify(clientData),
    contentType:"application/json",
    success: function(data){
        if(data.error) { return;}
        $("#contactForm .overlay").remove();
        $("#contactForm")[0];
        LoadFirstFunnel(data.id);
    }
 });

и для второй части вы должны изменить имя параметра с id на clientId:

public ActionResult _OpenFirstPanelModal(int clientId)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...