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