如何在具有嵌入文件的自定义服务器控件中从客户端调用服务器端代码 [英] How do I call server side code from Client side in custom server control with embedded files

查看:61
本文介绍了如何在具有嵌入文件的自定义服务器控件中从客户端调用服务器端代码的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述





最简单的方法我用文本框和按钮创建了一个自定义控件(不是网络用户控件)



当我点击按钮时,我想将文本从文本框传递到服务器而不刷新,并返回相同的文本但两次。



i有ASP。 NET服务器控件类我已经嵌入了javascript



i可以从嵌入式文件调用javascript函数,但我不知道如何调用服务器端方法





我尝试创建[WEBMETHOD],但这不起作用,因为这不是aspx页面(仅限.cs)。



我尝试创建updatepanel(里面是Textbox和Button),这是有效的,但我对这个解决方案不满意,因为我必须覆盖OnLoad和Render方法而且写起来太难了br $> b $ b



我尝试创建Web服务(.ASMX),但我不知道如何嵌入Web服务并使其工作



可以有人给予我建议如何做或者什么是创建自定义控件的最佳方法,嵌入所有文件并从客户端调用服务器端方法





这里是我的代码:





TestCall.cs



//嵌入式Javascript文件



[assembly:WebResource(LmxKontrole.Skripte.jquery-2.1.0.min.js ,text / javascript)]

[assembly:WebResource(LmxKontrole.Skripte.TestCall.js,text / javascript)]

[assembly:TagPrefix (LmxKontrole,Lmx)]



命名空间控制{



[Bindable(true) ]

[DefaultValue()]

[Localizable(true)]

[DefaultProperty(Text)]

[ToolboxData(< {0}:TestCall runat =server>)]



公共类TestCall:WebControl {



protected override void OnPreRender(EventArgs e){



base.OnPreRender(e);

//这里我加载嵌入的Javascript文件

ClientScriptManager cs = this.Page.ClientScript;

cs。 RegisterClientScriptResource(typeof(LmxKontrole.LmxGridView),LmxKontrole.Skripte.TestCall.js);

cs.RegisterClientScriptResource(typeof(LmxKontrole.LmxGridView),LmxKontrole.Skripte.jquery-2.1.0。 min.js); }



protected override void Render(HtmlTextWriter writer){



//这里我创建TextBox

TextBox tb1 = new TextBox();

tb1.ID =tb1;

base.Controls.Add(tb1);



//这里我创建按钮

按钮b1 =新按钮();

base.Controls.Add(b1 );

b1.ID =b1;

b1.Attributes.Add(onClick,JsCall(); return false;);



base.Render(作家); }







[WebMethod]

公共字符串CallThisFromJavaScript(字符串参数) )

{

返回参数+参数;

}



}



}





这里是TestCall.js






函数JsCall(){



var参数= $('#tb1')。val();



alert('用参数调用JavaScript:'+参数);

//这里我想调用服务器端函数

}

解决方案

('#tb1')。val();



alert('用参数调用JavaScript: '+参数);

//这里我想调用服务器端函数

}


创建空网页(aspx)使用WebMethod。从那里调用您的控制方法。这将允许您从客户端脚本访问它。





对于Web服务,您必须创建Web引用代理类到service,实例化该代理类并调用其方法。

见这里 [ ^ ]


< blockquote>谢谢你的回答。

当我有网页表格页面时这是有用的。但在自定义服务器控件中没有。


Hi,

For easyest way i have created a custom control (not web user control) with textbox and button

when i click on button, i want to pass text from textbox to server without refresh, and return same text but twice.

i have ASP.NET Server Control class where i have embedded javascript

i can call javascript functions from embedded file, but i dont know how to call server side method


I try to create [WEBMETHOD], but this is not working because this is not aspx page (just .cs).

I try to create updatepanel (inside is Textbox and Button) and this is working, but im not happy with this solution, because i have to override OnLoad and Render method and it is too hard to write


I try to create Web Service (.ASMX) but i dont know how to embedd web service and make it working

Can someone give me advice how to do or what is the best way to create custom control with all files embedded and to call server side method from client side


here is code i have:


TestCall.cs

//embedded Javascript files

[assembly: WebResource("LmxKontrole.Skripte.jquery-2.1.0.min.js", "text/javascript")]
[assembly: WebResource("LmxKontrole.Skripte.TestCall.js", "text/javascript")]
[assembly: TagPrefix("LmxKontrole", "Lmx")]

namespace Control{

[Bindable(true)]
[DefaultValue("")]
[Localizable(true)]
[DefaultProperty("Text")]
[ToolboxData("<{0}:TestCall runat="server">")]

public class TestCall : WebControl {

protected override void OnPreRender(EventArgs e) {

base.OnPreRender(e);
//here i load embedded Javascript files
ClientScriptManager cs = this.Page.ClientScript;
cs.RegisterClientScriptResource(typeof(LmxKontrole.LmxGridView), "LmxKontrole.Skripte.TestCall.js");
cs.RegisterClientScriptResource(typeof(LmxKontrole.LmxGridView), "LmxKontrole.Skripte.jquery-2.1.0.min.js"); }

protected override void Render(HtmlTextWriter writer) {

//here i create TextBox
TextBox tb1 = new TextBox();
tb1.ID ="tb1";
base.Controls.Add(tb1);

//here i create Button
Button b1 = new Button();
base.Controls.Add(b1);
b1.ID ="b1";
b1.Attributes.Add("onClick", "JsCall();return false;");

base.Render(writer); }

 

[WebMethod]
public string CallThisFromJavaScript(string parameter)
{
return parameter + parameter;
}

}

}


and here is TestCall.js



function JsCall() {

var parameter = $('#tb1').val();

alert('JavaScript is called with parameter: ' + parameter);
//here i want to call server side function
}

解决方案

('#tb1').val();

alert('JavaScript is called with parameter: ' + parameter);
//here i want to call server side function
}


Create empty web page (aspx) with WebMethod. Call your control methods from there. This will give you access to it from client side scripts.


For web service, you have to create web reference proxy class to the service, instantiate that proxy class and call its methods.
See here[^]


thank you for answer.
This is working when i have web form page. but in custom server control not.


这篇关于如何在具有嵌入文件的自定义服务器控件中从客户端调用服务器端代码的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆