仅需一个按钮即可将刚存储的数据提取到数据库中

时间:2019-06-10 06:52:06

标签: c# ajax asp.net-mvc

我正在为我的网站创建自己的营销渠道。如何获取刚刚保存到ajax调用中的记录的ID,而不必使用任何其他按钮或用户触发的方法。

我创建了一个模式,该模式在用户将其详细信息注册到我们的系统后显示为与用户进行交互的系统。无论如何,从此阶段开始,应该向用户询问有关其偏好和所需产品的多个问题。在我的脑海中,这只是意味着我应该在第一个模式弹出的那一刻更新该用户的信息。

用于保存用户信息的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();
        }
    });
});

用于保存到HomeController.cs中的C#方法:

[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();
        }
    });
};

HomeController.cs上的C#调用,该调用响应LoadFirstFunnel ajax调用:

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 :(得分:0)

创建一个代表您的请求正文的类:

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)