C# 仅使用一个按钮将刚刚存储到数据库中的数据拉入

C# 仅使用一个按钮将刚刚存储到数据库中的数据拉入,c#,ajax,asp.net-mvc,C#,Ajax,Asp.net Mvc,我正在为我的网站创建自己的营销渠道。如何在不使用任何其他按钮或用户触发的方法的情况下,获取刚刚保存到ajax调用中的记录的id 我创建了一个模式,在用户将他们的详细信息注册到我们的系统后显示,作为系统和用户交互的方式。无论如何,从这个阶段开始,应该向用户询问多个关于他们的偏好和他们想要的产品的问题。在我看来,这只是意味着我应该在第一个模态弹出的那一刻更新用户的信息 用于保存用户信息的Ajax调用: $("#btn-save-client").click(function () { var

我正在为我的网站创建自己的营销渠道。如何在不使用任何其他按钮或用户触发的方法的情况下,获取刚刚保存到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();
        }
    });
});
从my 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();
        }
    });
};
注册后弹出的
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>

创建一个代表您的请求主体的类:

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)

创建一个代表您的请求主体的类:

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)


什么不起作用?控制器方法是否实际被命中?请使用[HttpPost]标记控制器方法attributes@CiubotariuFlorin是的,我的输出值一直为零或为空。这就是问题所在。你是否用[HttpPost]装饰了你的控制器方法?@CiubotariuFlorin是的,我装饰了。我仍然遇到同样的问题,即使我给变量加上一个值,它仍然返回为零。一个名为SaveClientData的方法中有一个后端方法,名为SaveClient,在这个后端方法中,我强制输入一个值,当它读取完这个方法并必须返回控制器以完成剩余的代码时,我的id为零,尽管在控制器之前,SaveClient带来了一个具有正确值的id。但我仍在研究如何成功地应用您的解决方案……什么不起作用?控制器方法是否实际被命中?请使用[HttpPost]标记控制器方法attributes@CiubotariuFlorin是的,我的输出值一直为零或为空。这就是问题所在。你是否用[HttpPost]装饰了你的控制器方法?@CiubotariuFlorin是的,我装饰了。我仍然遇到同样的问题,即使我给变量加上一个值,它仍然返回为零。一个名为SaveClientData的方法中有一个后端方法,名为SaveClient,在这个后端方法中,我强制输入一个值,当它读取完这个方法并必须返回控制器以完成剩余的代码时,我的id为零,尽管在控制器之前,SaveClient带来了一个具有正确值的id。但我仍在研究如何成功应用您的解决方案……好吧,ajax调用中的clientData变量确实从表单中获取客户机数据。只有当它点击控制器时,它才会给出空值。我甚至认为可能是“data:JSON.stringify(clientData)”,并返回到“data:{clientData:clientData}”,但仍然发现它仍然提供空值…你能编辑这个问题并将新代码放在那里吗?@MotseMo我已经编辑了我的答案。另外添加
contentType:“application/json”
。您好,它在C#中似乎工作正常。但是现在我一直在努力找出如何将值带回ajax调用中,以便它能够通过LoadFirst漏斗(data.id)。我使用data.id,希望它能将我在顶部变量中的初始id值更改为我们从数据库中提取的id值…你能用最新版本更新你的代码吗?根据您提供的代码,我们不知道您的API返回给客户端的是什么。只有当它点击控制器时,它才会给出空值。我甚至认为可能是“data:JSON.stringify(clientData)”,并返回到“data:{clientData:clientData}”,但仍然发现它仍然提供空值…你能编辑这个问题并将新代码放在那里吗?@MotseMo我已经编辑了我的答案。另外添加
contentType:“application/json”
。您好,它在C#中似乎工作正常。但是现在我一直在努力找出如何将值带回ajax调用中,以便它能够通过LoadFirst漏斗(data.id)。我使用data.id,希望它能将我在顶部变量中的初始id值更改为我们从数据库中提取的id值…你能用最新版本更新你的代码吗?根据您提供的代码,我们不知道您的API返回给客户端的是什么。