从 AJAX JSON 提交到 SQL Server --> Web 方法
Posted
技术标签:
【中文标题】从 AJAX JSON 提交到 SQL Server --> Web 方法【英文标题】:Submit to SQL Server from AJAX JSON --> Web Method 【发布时间】:2020-07-31 17:16:57 【问题描述】:我一直在研究一种解决方案,从通过 AJAX 提交到 WebMethod 的网页中获取数据,并最终进入数据库。一旦 AJAX Get
方法完成,我对如何处理 Web 方法代码块感到困惑。
这是我的 AJAX
function UpdatePeople()
var PeopleToUpdate = [
"name": "John", "age": "17" ,
"name": "Harry", "age": "19" ,
"name": "Steve", "age": "23"
];
jQuery.ajax(
url: '_ajax_updatepeople.aspx/UpdateOnDemand',
type: "POST",
data: JSON.stringify('PeopleToUpdate' : PeopleToUpdate ),
dataType: "json"
);
这是我的 Web 方法和公共类
[WebMethod]
public string UpdateOnDemand(List<People> PeopleToUpdate)
// What do I do here ?????
public class People
public string name get; set;
public string age get; set;
如您所见,在我的 Web 方法中,我不知道如何访问这些 JSON 数据并对其进行处理。这是我尝试过的,它根本不起作用。我可以做些什么来纠正这个问题,还是我需要采取另一种方法?出现的错误(无论如何这可能不是唯一的错误)是无法从 Generic.List
转换为字符串(在动态内容的情况下......部分)
[WebMethod]
public string UpdateOnDemand(List<People> PeopleToUpdate)
dynamic content = JsonConvert.DeserializeObject<People>(PeopleToUpdate);
foreach (var Item in content)
SqlConnection myConnection = null;
SqlCommand sqlCmd = null;
try
myConnection = DBConnectConfig.openDBConnection();
sqlCmd = new SqlCommand("Insert Into Users (Name, Age) VALUES (@Name, @Age)");
sqlCmd.CommandType = System.Data.CommandType.Text;
sqlCmd.Connection = myConnection;
sqlCmd.Parameters.AddWithValue("@Name", Item.name);
sqlCmd.Parameters.AddWithValue("Age", Item.age);
sqlCmd.ExecuteNonQuery();
finally
DBConnectConfig.disposeDBObjects(myConnection, sqlCmd);
return "People added to the database";
我是在正确的轨道上,还是根本没有?
【问题讨论】:
一方面,当涉及到 WebMethod 并转换为 List你在正确的轨道上。有几点要提
1) 不需要此行
dynamic content = JsonConvert.DeserializeObject<People>(PeopleToUpdate);
因为 ASP.NET 已经为您完成了从 JSON 字符串到类 People
的转换,所以方法 UpdateOnDemand(List<People> PeopleToUpdate)
已经具有反序列化模型。
2) 你可以遍历人的集合
foreach (var person in PeopleToUpdate)
3) 如果你的domain model 由多个类组成,它们之间有关系, 您可能会考虑为数据层使用 ORM,例如 Entity Framework。
4) 解决方案结构可以修改,项目结构示例
MySolution.Data(数据访问) MySolution.Business(对于业务组件,使用数据) MySolution.Web(使用 Business) MySolution.Data.Test(用于测试数据访问层的 xUnit/NUnit 项目)业务组件示例
public class PeopleService: IPeopleService
public PeopleService(/* inject settings with connection string */)
public void UpdatePeople(List<People> people)
var dal = new DALContext(.. connection string from settings);
data.UpdatePeople(people);
DAL 组件:
public class DALContext
// this method can be unit tested:
public void UpdatePeople(List<People> people)
.. code for database operations
【讨论】:
谢谢马丁,这肯定让我通过了出错的部分,我相信没有更多的错误。唯一的问题是我的数据库无法更新,实际上我似乎无法在此 Web 方法中设置中断来暂停以确保它按我预期的那样进行处理。我什至将 Response.Redirect 作为 Web 方法中的第一行,以至少查看 Web 方法是否正在运行,并且它甚至无法重定向。从查看代码 sn-ps 可以看出还有什么可以防止这种情况发生的吗? 为了解决与数据库操作有关的问题,可能有助于构建您的解决方案,将保存和从数据库加载的逻辑放入解决方案中的单独项目中。然后可以为这个新项目中的类创建单元测试(xUnit)。答案是一个例子。 一件小事,我们称为 UpdateOnDemand 的方法,它确实插入。 感谢您的帮助,马丁。我将尝试了解更多关于您所描述的内容,因为我尝试更新数据库的方式根本不起作用。我可以将它移到标准方法中,它工作得很好,但是当试图通过 ajax 调用更新相同的东西时它不起作用,我正在努力得到任何类型的响应来说明原因。以上是关于从 AJAX JSON 提交到 SQL Server --> Web 方法的主要内容,如果未能解决你的问题,请参考以下文章
怎么在前端用ajax提交一个json数组到后台,后台怎么获得
Jquery Ajax 复杂json对象提交到WebService