我在用户控件中使用了这个ASP.NET C#方法:
protected void SaveChanges(object clientArr)
{
System.Diagnostics.Debug.WriteLine("SaveChanges");
//clientArr will be a string[]
}
我希望能够调用此方法并从JavaScript端传递变量。我知道这样做'<%=divMainContent.ClientID%>'
可以获得客户端ID。我试过'<%=SaveChanges(clientArr)%>'
,但它不起作用。有一个工作和简单的解决方案吗?最好使用'<%=%>'
(不确定它叫什么)?
JavaScript方法:
function clickSaveChanges(element) {
var mainContentChildren = document.getElementById('<%=divMainContent.ClientID%>').childNodes;
var clientArr = new Array(mainContentChildren.length * 2);
//add stuff to clientArr
'<%=SaveChanges(clientArr)%>' //this line causes page to crash
}
答案 0 :(得分:0)
SaveChanges
应返回<%= %>
符号的内容。但是,您无法通过名称调用客户端JavaScript来调用服务器端方法;您必须通过a web service或page callback与服务器进行通信。页面回调启动页面生命周期的正常流程,即使它是带外请求。
答案 1 :(得分:0)
您可以通过非常简单的ajax调用实现相同的功能。您只需要在脚本中添加JQuery即可使用ajax。
C#代码
[WebMethod]
public static void SaveChanges(object clientArr)
{
System.Diagnostics.Debug.WriteLine("SaveChanges");
//clientArr will be a string[]
}
的JavaScript
function clickSaveChanges(element) {
var mainContentChildren = document.getElementById('<%=divMainContent.ClientID%>').childNodes;
var clientArr = new Array(mainContentChildren.length * 2);
//add stuff to clientArr
String sParam = clientArr.toString();
$.ajax({
type: "POST",
url: "PageName.aspx/SaveChanges",
data: "{s:sParam}", // passing the parameter
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function(retValue) {
// Do something with the return value from.Net method
}
});
}
答案 2 :(得分:0)
您无法将客户端JavaScript代码与服务器端C#代码混合在一起。你需要的是一些AJAX魔术来使这项工作。你需要做两件事才能完成这项工作:
您可以将请求发送到的端点。您可以使用ASP.NET WebAPI或其他一些.NET样式端点来实现此目的。这取决于您当前的架构。您使用的是MVC还是WebForms?一旦从您的UI接收数据,此端点将负责调用您的SaveChanges()方法。
您需要从客户端调用AJAX才能将数据发送到您的终端。最简单的方法是使用jQuery。看一下AJAX方法的文档:
http://api.jquery.com/jquery.ajax/
一个非常简单的例子是这样的:
$.ajax({
type: "POST",
url: "yourEndpointAddress",
data: {
name: "John",
location: "Boston"
}
})
.success(function (msg) {
alert("Data Saved: " + msg);
});
希望它有所帮助。