我是Web开发的新手,寻找从客户端更新SQL数据库的安全方式,或者在不刷新网页的情况下更新数据库的其他描述(如facebook按钮)。 我搜索了很多,发现它可以通过使用Web服务并通过javascript或使用javascript direct或ajax调用它来完成,但这是最好的和安全的方式,还有其他方法吗? 感谢..
答案 0 :(得分:2)
你可以使用ajax从客户端更新数据库。就像你点击网页中的按钮一样,通过JavaScript或jQuery获取该页面的click事件,然后通过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])。然后在此函数中执行更新并返回一些字符串或bool值,以便您可以判断更新已完成,那么成功的值是函数的名称,如果您的函数成功运行将运行,因此在JavaScript或jQuery中定义该函数
function UpdateDone(response)
{
if(response.d == 'done')
{ alert('Update is done'); }
else
{ alert('Sorry Update not done'); }
}
上面的代码不会进行任何回发,您会看到您的值在数据库中更新。请注意,您在C#页面中创建的函数请将其标记为WebMethod,它将是一个静态方法,然后只有您的JavaScript才能找到该函数。
希望这能解决您的问题。
答案 1 :(得分:1)
你使用的术语ajax是正确的,但已经有点旧了。街区的新孩子被称为SPA,SPA代表单页申请
它可以实现您想要实现的目标:不再刷新页面。所以这似乎是一个很好的开始方式
Here is The ASP.NET Single Page Application homepage
我的建议是在(许多)javascript框架中研究和投入时间,这将有助于您更快地实现这一目标。手工编写javascript并使其跨浏览器工作是太多的工作。 ASP.NET团队选择upshot.js来解决您的问题,这似乎是一个不错的选择。
屏幕截图取自here
答案 2 :(得分:1)
我发现使用带有ASP.NET MVC 3的JSON进行AJAX是做最简单的AJAX请求的方法。然后,您可以使用特定的操作方法来处理请求,并通过实体框架(EF)对数据库进行更新。
基本上只传递需要在JSON中更新的数据。从那里MVC Action接收JSON,并使用EF查找DB记录,应用/保存更改。它甚至可以使用成功消息进行响应,您的AJAX可以使用该消息来更新某些字段,以验证为用户保存的数据(您甚至可以在第一个ajax请求和第一个ajax请求之间出现“Saving ...”消息。回应。)
这样您就可以在不刷新页面的情况下发送请求。所有数据库访问代码都将在Action方法中作为服务器端。
此示例显示了如何执行json请求。您可以通过向Create方法添加其他代码来与实体框架(或您选择的数据库工具)进行交互来根据传入的Person person
参数更新记录(通知MVC做了一件非常好的事情)将json数据转换为一个漂亮的Person
类!)
http://juristr.com/blog/2011/08/posting-json-data-to-aspnet-mvc-3-web/
如果用户在webform中输入的数据是敏感的,则需要在发送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