我在 Web 开发方面有点新,正在寻找从客户端更新 SQL 数据库的安全方法,或者在其他描述中更新数据库而不刷新网页(如 facebook 按钮)。我搜索了很多,发现可以通过使用 Web 服务并通过 javascript 或使用 javascript direct 或 ajax 调用它来完成,但哪种方法是最好和安全的,还有其他方法吗?谢谢..
3 回答
您可以使用 ajax 从客户端更新数据库。就像单击网页中的按钮一样,通过 JavaScript 或 jQuery 获取该页面的单击事件,然后通过 ajax 您可以执行数据库更新。请看下面的代码:
对于捕捉事件(比如我的按钮 id 是 button1):
$('#<%=button1.ClientID%>').click(function{
$.ajax({
type: "POST",
url: "default.aspx/UpdateDatabase",
data: "{'textboxvalue':'" + $('<%=textbox1.ClientID%>').val() + "'}'
contentType: "application/json;charset=utf-8",
datatype: "json",
success: UpdateDone
});
});
在上面的代码中,您已将 textbox1 中的一个值传递给 Default.aspx 页面中的函数 UpdateDatabse(请将此函数定义为 [WebMethod])。然后在此函数中进行更新并返回一些字符串或布尔值,以便您可以判断更新已完成,然后成功的值是函数的名称,如果您的函数成功运行,它将运行因此在 JavaScript 或 jQuery 中定义该函数
function UpdateDone(response)
{
if(response.d == 'done')
{ alert('Update is done'); }
else
{ alert('Sorry Update not done'); }
}
上面的代码不会做任何你看到你的值在数据库中更新的回发。请注意,您在 C# 页面中创建的函数请将其标记为 WebMethod,它将是一个静态方法,只有您的 JavaScript 才能找到该函数。
希望这能解决您的问题。
您使用的术语 ajax 是正确的,但已经有点老了。该街区的新孩子被称为 SPA,其中 SPA 代表单页应用程序
它将您想要实现的目标做到极致:不再刷新页面。所以这似乎是一个很好的开始方式
我的建议是研究并在其中一个(许多)javascript 框架中投入时间,这将帮助您更快地实现这一目标。手动编码 javascript 并使其跨浏览器工作是太多的工作。ASP.NET 团队选择 upshot.js 来解决您的问题,这似乎是一个不错的选择。
从这里截屏
我发现使用 ASP.NET MVC 3 使用 JSON 执行 AJAX 是执行 AJAX 请求的最简单方法。然后,您可以使用特定的操作方法来处理请求并通过实体框架(EF)对数据库进行更新。
本质上只传递 JSON 中需要更新的数据。MVC Action 从那里接收 JSON,并使用 EF 查找数据库记录,应用/保存更改。它甚至可以响应一条成功消息,您的 AJAX 可以使用该消息来更新验证数据是否已为用户保存的某些字段(您甚至可以在第一个 ajax 请求和响应。)
这将允许您在不刷新页面的情况下发送请求。您的所有数据库访问代码都将在 Action 方法中位于服务器端。
这个例子展示了你可以如何做一个 json 请求。您可以通过向 Create 方法添加额外的代码来修改它,以与实体框架(或您选择的数据库工具)交互,以根据Person person
传入的参数更新记录(注意 MVC 在转换 json 数据方面做得非常好进入一个很好的Person
班级!)
http://juristr.com/blog/2011/08/posting-json-data-to-aspnet-mvc-3-web/
如果用户将在 web 表单中输入的数据是敏感数据,则您需要在发送 json 请求之前对其进行加密。我个人只是将网站设置为使用 SSL。您自己制作的任何东西都可能不如 SSL 安全。
添加到 Create 方法的代码可能如下所示:
//Find the person that they are attempting to edit
Person currentPerson = db.Persons.Find(person.PersonKey);
//update the database fields based on the submitted data(I would probably actually use AutoMapper for this
currentPerson.Name = person.Name;
currentPerson.DateOfBith = person.DateOfBirth;
//etc.
db.SaveChanges();
//compose a JSON response object indicating success, you would want to combine this with a try catch in the above to reply regarding failures as well