Asp.net 如何使用jquery调用服务器端方法?
我正在尝试使用jquery调用一个服务器端方法,处理在客户端动态生成的textbox的textchange事件(我不知道如何获取它的id)。有人能帮我做这件事吗?im使用的脚本如下所示:Asp.net 如何使用jquery调用服务器端方法?,asp.net,ajax,jquery-ui,jquery,Asp.net,Ajax,Jquery Ui,Jquery,我正在尝试使用jquery调用一个服务器端方法,处理在客户端动态生成的textbox的textchange事件(我不知道如何获取它的id)。有人能帮我做这件事吗?im使用的脚本如下所示: <script type="text/javascript"> $(init); function init() { $('#test').droppable( //Div Control where i'll be dropping items
<script type="text/javascript">
$(init);
function init() {
$('#test').droppable( //Div Control where i'll be dropping items
{
drop: handleDropEvent
});
$('a').each(function(idx, item) {
$(item).draggable({ cursor: 'move', helper: 'clone' })
});
}
function handleDropEvent(event, ui) {
var draggable = ui.draggable;
document.getElementById('test').innerHTML += addColumn(draggable.attr('text')) + '<br>';
}
$('.textChangeClass').live('change', function() {
/* Evokes on the text change event for the entire textboxes of class .textChangeClass. Is it possible to specify the dynamic textbox generated @ clientside here? (like for e.g. : $('#mytextbox').click(function () ) */
$.ajax({
type: "POST",
url: "Webtop.aspx/ServerSideMethod", //This is not getting called at all.
data: "{'param1': AssignedToID}",
contentType: "application/json; charset=utf-8",
dataType: "json",
async: true,
cache: false,
success: function(msg) {
alert("From Server");
}
})
});
});
function addColumn(column) {
var iHtml;
//This is how i'm generating the textboxes along with a checkbox bound by a div.
iHtml = '<div id="dv' + column + '" width="100px;" height="20px;" padding: "0.5em;"> ' + '<span title="ToolTipText">' + '<input type="checkbox" id="cb' + column + '" value="' + column + '" /> <label for="cb' + column + '">' + column + '</label></span><input class="textChangeClass" type="text" id="aln' + column + '"> </div>';
return iHtml
}
</script>
美元(初始);
函数init(){
$('#test')。可拖放(//Div控件,我将在其中拖放项
{
下降:扶手缆绳通风口
});
$('a')。每个(函数(idx,项){
$(项).draggable({cursor:'move',helper:'clone'})
});
}
函数handleDropEvent(事件,ui){
var draggable=ui.draggable;
document.getElementById('test').innerHTML+=addColumn(draggable.attr('text'))+'
';
}
$('.textChangeClass').live('change',function(){
/*调用类的整个文本框的文本更改事件。textChangeClass。是否可以在此处指定@clientside生成的动态文本框?(例如:$(“#mytextbox”)。单击(函数())*/
$.ajax({
类型:“POST”,
url:“Webtop.aspx/ServerSideMethod”//根本不会调用它。
数据:“{'param1':AssignedToID}”,
contentType:“应用程序/json;字符集=utf-8”,
数据类型:“json”,
async:true,
cache:false,
成功:功能(msg){
警报(“来自服务器”);
}
})
});
});
函数addColumn(列){
var iHtml;
//这就是我如何生成文本框以及由div绑定的复选框。
iHtml=“”+“”+“”+列+“”;
返回iHtml
}
您需要编写代码,在生成textbox之后将事件添加到textbox,否则它不会被触发
$.ajax({
type: "post", url: "/SomeController/SomeAction",
success: function (data, text) {
//...
},
error: function (request, status, error) {
alert(request.responseText);
}
});
$.ajax({...})return foo}
编辑
Fiddler/Firebug网络面板是您的朋友。。。它们将允许您检查来自服务器的请求和响应。这样,您就不必添加错误处理程序(尽管您最终可能会因为其他原因而添加错误处理程序)
编辑
要回答问题的另一部分,您可以通过使用事件处理程序中的“this”关键字访问触发更改事件的文本框
$('.textChangeClass').live('change', function(event) {
//Note that the 'event' parameter has interesting things in it too.
var changedText = $(this).val();
alert("The value in the textbox is: '" + changedText + "'");
var data = {
param1: changedText
};
$.ajax({
...
//Using json2 library here to create json string
data: JSON.stringify(data),
...
});
});
注意,我在事件处理程序中添加了可选的“event”参数。它有很多有趣的东西,对于jQuery新手来说,这是一个经常被忽略的东西。阅读相关内容。我如何将其绑定到我的动态文本框?事实上,事件是在文本框的文本更改时触发的,但ajax部分不起作用向您的ajax调用添加错误函数,正如我在回答中所做的那样。您问题的解决方案不仅取决于客户端的代码(JavaScript代码),还取决于服务器代码。对于我来说,完全不清楚您是如何实现您的服务器方法的。最简单的方法是ASMX web服务或WCF,但在这种情况下,url应该是
Webtop.ASMX/ServerSideMethod
或Webtop.svc/ServerSideMethod
。您可以在问题中包含更多关于服务器代码的信息,或者更好地包含代码片段。我删除了参数并尝试访问服务器端方法。但还是没用。我有萤火虫。不知道如何在脚本中使用它。打开firebug,然后转到“网络”选项卡。按照说明启用它。2.重新加载第3页。在所需文本框4中触发更改事件。查看ajax对服务器的调用(或缺少),您也可以调试javascript。转到脚本表并启用它。您可以在事件处理程序中设置断点,并查看发生了什么。如果您很勇敢,甚至可以使用jquery代码。打开脚本和网络调试会大大降低正常浏览速度,因此您需要确保禁用firebug,或者至少关闭脚本和网络调试以进行正常浏览。这很有趣,也很有帮助。非常感谢你。但我注意到的一件事是,我的脚本在跨越语句数据时被破坏:我的意思是,它甚至没有达到成功或错误调用。。。那么您正在发送一个http请求。我相信它使用反射来查看参数的类型。从0个参数和一个空数据字段“{}”开始,看看是否可以让它这样工作。那么看看这个,,