c# - 从 AJAX JSON 提交到 SQL Server --> Web 方法
问题描述
我一直在研究一种解决方案,从通过 AJAX 提交到 WebMethod 的网页中获取数据,并最终进入数据库。Get
一旦 AJAX方法完成,我对如何处理 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
为 String (在动态内容的情况下......部分)
[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";
}
我是在正确的轨道上,还是根本没有?
解决方案
你在正确的轨道上。有几点要提
1)不需要这条线
dynamic content = JsonConvert.DeserializeObject<People>(PeopleToUpdate);
因为 ASP.NET 已经People
为您完成了从 JSON 字符串到类的转换,所以该方法UpdateOnDemand(List<People> PeopleToUpdate)
已经具有反序列化模型。
2)你可以遍历人的集合
foreach (var person in PeopleToUpdate)
3)如果你的领域模型由多个类组成,它们之间有关系,你可以考虑使用 ORM,比如数据层的实体框架。
4)可以修改解决方案的结构,项目结构的一个例子
- MySolution.Data(数据访问)
- MySolution.Business(对于业务组件,使用数据)
- MySolution.Web(使用业务)
- 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
}
}
推荐阅读
- python - Python pandas 解析 html 表以获取隐藏的值和链接
- vba - 将 VBA 宏应用于 Visio 中的不同页面
- excel - 合并工作簿 - 获取其他值并将它们添加到 C 列
- javascript - 需要在jsp的锚标签中显示javascript值
- c# - StructureMap 异常代码:202 未为 PluginFamily System.Net.Http.HttpMessageHandler、System.Net.Http、版本 = 4.2.0.0 定义默认实例
- angular - 我们如何将 TestBed 用于带有 NativeScript 的组件?
- java - 如何编写单元测试用例或模拟改造
- laravel - 使用十月CMS的单个帖子的路线
- excel - SumIfs 返回 0 和正确的结果
- spring-boot - 记录 HikariCP Spring boot