从JavaScript调用ASP.NET函数?
我正在用ASP.NET写一个网页。我有一些JavaScript代码,还有一个带有点击事件的提交按钮从JavaScript调用ASP.NET函数?,javascript,c#,asp.net,onclick,Javascript,C#,Asp.net,Onclick,我正在用ASP.NET写一个网页。我有一些JavaScript代码,还有一个带有点击事件的提交按钮 是否可以使用JavaScript的单击事件调用我在ASP中创建的方法?您可以使用.NET Ajax PageMethods异步执行此操作。请参阅或。将完成此操作。您还可以创建自己的解决方案,包括使用AJAX调用自己的aspx(基本上)脚本文件来运行.NET函数 我建议使用MicrosoftAjax库。安装并引用后,只需在页面加载或初始化中添加一行: Ajax.Utility.RegisterTyp
是否可以使用JavaScript的单击事件调用我在ASP中创建的方法?您可以使用.NET Ajax PageMethods异步执行此操作。请参阅或。将完成此操作。您还可以创建自己的解决方案,包括使用AJAX调用自己的aspx(基本上)脚本文件来运行.NET函数 我建议使用MicrosoftAjax库。安装并引用后,只需在页面加载或初始化中添加一行:
Ajax.Utility.RegisterTypeForAjax(GetType(YOURPAGECLASSNAME))
然后你可以做如下事情:
<Ajax.AjaxMethod()> _
Public Function Get5() AS Integer
Return 5
End Function
函数调用的最后一个参数必须是返回AJAX请求时将执行的javascript回调函数。好吧,如果您不想使用AJAX或任何其他方式进行调用,而只想进行正常的ASP.NET回发,下面是您的操作方法(不使用任何其他库): 不过这有点棘手……:) 一,。在代码文件中(假设您使用的是C#和.NET 2.0或更高版本),向Page类添加以下接口,使其看起来像
public partial class Default : System.Web.UI.Page, IPostBackEventHandler{}
二,。这将(使用Tab选项卡)将此函数添加到代码文件中:
public void RaisePostBackEvent(string eventArgument) { }
iii.在JavaScript中的onclick事件中,编写以下代码:
var pageId = '<%= Page.ClientID %>';
__doPostBack(pageId, argumentString);
var pageId='';
__doPostBack(pageId,argumentString);
这将调用代码文件中的“RaisePostBackEvent”方法,其中“eventArgument”作为从JavaScript传递的“argumentString”。现在,您可以调用您喜欢的任何其他事件
附言:那就是“下划线doPostBack”。。。而且,序列中应该没有空格。。。不知何故,大规模杀伤性武器不允许我在字符后面加下划线 您可能希望为常用方法创建web服务。
只需在要调用的函数上添加WebMethodAttribute即可。
拥有一个包含所有常用内容的web服务也使系统更易于维护。使用
\uu doPostBack()
方法效果良好
另一个解决方案(非常粗糙)是简单地在标记中添加一个不可见的ASP按钮,然后用JavaScript方法单击它
<div style="display: none;">
<asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>
<div style="display: none;">
<asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>
MicrosoftAjax库将实现这一点。您还可以创建自己的解决方案,包括使用AJAX调用自己的aspx(基本上)脚本文件来运行.NET函数
这是一个名为AjaxPro的库,由一个名为的MVP编写。此库不是由Microsoft编写的
我已经广泛使用了AjaxPro,它是一个非常好的库,我建议对服务器进行简单的回调。它在Microsoft版本的Ajax中运行良好,没有任何问题。然而,我要指出的是,微软制造Ajax是多么容易,我只会在真正必要的时候使用它。要完成从Microsoft获得的一些非常复杂的功能,只需将其放到更新面板中,就需要大量的JavaScript。这条回复对我来说轻而易举,感谢跨浏览器: __doPostBack()方法运行良好 另一个解决方案(非常粗糙)是简单地在标记中添加一个不可见的ASP按钮,然后用JavaScript方法单击它
<div style="display: none;">
<asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>
<div style="display: none;">
<asp:Button runat="server" ... OnClick="ButtonClickHandlerMethod" />
</div>
大宗报价
如果未在页面上生成_udopostback函数,则需要插入控件以强制执行以下操作:
<asp:Button ID="btnJavascript" runat="server" UseSubmitBehavior="false" />
如果您收到预期的对象错误,请将此行添加到页面加载
ClientScript.GetPostBackEventReference(this, "");
您可以使用
PageMethods.C#方法名称将C#方法或VB.NET方法访问到JavaScript中。如果您想触发服务器端事件处理程序,例如按钮的单击事件,这两种情况(即同步/异步)都非常容易
用于触发控件的事件处理程序:
如果您已经在页面上添加了ScriptManager,请跳过步骤1
在页面客户端脚本部分添加以下内容
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
//
为控件编写服务器端事件处理程序
受保护的无效btnSayHello_单击(对象发送方,事件参数e)
{
Label1.Text=“你好,世界……”;
}
添加一个客户端函数来调用服务器端事件处理程序
函数SayHello(){
__doPostBack(“btnSayHello”);
}
用控件的客户端id替换上面代码中的“btnSayHello”
这样,如果控件位于更新面板内,则页面将不会刷新。那太容易了
还有一点要说的是:小心使用客户端id,因为它取决于使用ClientIDMode属性定义的id生成策略。静态、强类型编程对我来说总是很自然,所以一开始我拒绝学习JavaScript(更不用说HTML和CSS了)当我不得不为我的应用程序构建基于web的前端时。我会做任何事情来解决这个问题,比如重定向到一个页面,只是为了在OnLoad事件上执行和操作,只要我可以编写纯C#
然而,你会发现,如果你要使用网站,你必须有一个开放的思想,开始考虑更多面向网络的东西(也就是说,不要试图在服务器上做客户端的事情,反之亦然)。我喜欢ASP.NET webforms,并且仍然使用它(以及),但我要说的是,通过使事情变得更简单并隐藏客户端和服务器的分离,它可能会让新手感到困惑,有时甚至会让事情变得更困难
我的建议是学习一些基本的JavaScript(如何注册事件、检索DOM对象、操作CSS等),您会发现web编程更有趣(更不用说更容易)。很多人提到了不同的Ajax库,但我没有看到任何实际的Ajax示例,所以就这样说吧。(如果您不熟悉Ajax,那么只需发出一个异步HTTP请求来刷新内容(或者在您的场景中执行服务器端操作),而无需重新加载整个页面或进行完整的回发
客户端:
//<![CDATA[
var theForm = document.forms['form1'];
if (!theForm) {
theForm = document.form1;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}
//]]>
<script type="text/javascript">
var xmlhttp = new XMLHttpRequest(); // Create object that will make the request
xmlhttp.open("GET", "http://example.org/api/service", "true"); // configure object (method, URL, async)
xmlhttp.send(); // Send request
xmlhttp.onstatereadychange = function() { // Register a function to run when the state changes, if the request has finished and the stats code is 200 (OK). Write result to <p>
if (xmlhttp.readyState == 4 && xmlhttp.statsCode == 200) {
document.getElementById("resultText").innerHTML = xmlhttp.responseText;
}
};
</script>
public class DataController : ApiController
{
public HttpResponseMessage<string[]> Get()
{
HttpResponseMessage<string[]> response = new HttpResponseMessage<string[]>(
Repository.Get(true),
new MediaTypeHeaderValue("application/json")
);
return response;
}
}
void Application_Start(object sender, EventArgs e)
{
RouteTable.Routes.MapHttpRoute("Service", "api/{controller}/{id}");
}
if(!ClientScript.IsStartupScriptRegistered("window"))
{
Page.ClientScript.RegisterStartupScript(this.GetType(), "window", "pop();", true);
}
Response.Write("<script>alert('Hello World');</script>");
document.getElementById('<%=btnName.ClientID%>').click()
public void RaisePostBackEvent(string _arg)
{
UserControlID.RaisePostBackEvent(_arg);
}
public void RaisePostBackEvent(string _arg)
{
UserControlID.method1();
UserControlID.method2();
}
<script src="http://code.jquery.com/jquery-3.3.1.js" />
<script language="javascript" type="text/javascript">
function GetCompanies() {
$("#UpdatePanel").html("<div style='text-align:center; background-color:yellow; border:1px solid red; padding:3px; width:200px'>Please Wait...</div>");
$.ajax({
type: "POST",
url: "Default.aspx/GetCompanies",
data: "{}",
dataType: "json",
contentType: "application/json; charset=utf-8",
success: OnSuccess,
error: OnError
});
}
function OnSuccess(data) {
var TableContent = "<table border='0'>" +
"<tr>" +
"<td>Rank</td>" +
"<td>Company Name</td>" +
"<td>Revenue</td>" +
"<td>Industry</td>" +
"</tr>";
for (var i = 0; i < data.d.length; i++) {
TableContent += "<tr>" +
"<td>"+ data.d[i].Rank +"</td>" +
"<td>"+data.d[i].CompanyName+"</td>" +
"<td>"+data.d[i].Revenue+"</td>" +
"<td>"+data.d[i].Industry+"</td>" +
"</tr>";
}
TableContent += "</table>";
$("#UpdatePanel").html(TableContent);
}
function OnError(data) {
}
</script>
[WebMethod]
[ScriptMethod(ResponseFormat= ResponseFormat.Json)]
public static List<TopCompany> GetCompanies()
{
System.Threading.Thread.Sleep(5000);
List<TopCompany> allCompany = new List<TopCompany>();
using (MyDatabaseEntities dc = new MyDatabaseEntities())
{
allCompany = dc.TopCompanies.ToList();
}
return allCompany;
}
var button = document.getElementById(/* Button client id */);
button.click();
var button = document.getElementById('<%=formID.ClientID%>');
<%= Page.ClientScript.GetPostBackEventReference(ddlVoucherType, String.Empty) %>;
window.location = "Page.aspx?key=1";
protected void Page_Load(object sender, EventArgs e)
{
if (Request.QueryString["key"] != null)
{
string key= Request.QueryString["key"];
if (key=="1")
{
// Some code
}
}
}