C# Can';t在其代码隐藏中访问基本页的主体标记
我正在尝试向站点中的所有页面添加Javascript。因此,我创建了一个基本页面,站点上的大多数页面都是使用C# Can';t在其代码隐藏中访问基本页的主体标记,c#,html,asp.net,C#,Html,Asp.net,我正在尝试向站点中的所有页面添加Javascript。因此,我创建了一个基本页面,站点上的大多数页面都是使用从该页面继承的。您使用了错误的工具将JavaScript添加到站点中的所有页面。相反,你应该使用。正如你所看到的,我基本上是在尝试从客户端调用PageMethod,母版页和用户控件与PageMethods不匹配…这就是为什么我使用这种方法的原因。你不应该首先使用PageMethods,或者web方法。微软不再支持他们,并且大力支持他们。但一个简单的解决方法是将您的逻辑移动到ASMX中的we
从该页面继承的。您使用了错误的工具将JavaScript添加到站点中的所有页面。相反,你应该使用。正如你所看到的,我基本上是在尝试从客户端调用PageMethod,母版页和用户控件与PageMethods不匹配…这就是为什么我使用这种方法的原因。你不应该首先使用PageMethods,或者web方法。微软不再支持他们,并且大力支持他们。但一个简单的解决方法是将您的逻辑移动到ASMX中的web方法中,或者将逻辑放入通用处理程序ASHX.Ohh…如果我必须在web应用程序中从客户端到服务器进行通信,我将使用WebMethods/PageMethods。你能解释一下为什么这不是一个好的做法吗?另外,请提供有关您正在谈论的处理程序的更多详细信息。您可以从Visual Studio的“添加新项”菜单向应用程序添加通用处理程序(.ashx)。它只是一个端点,在这里,您收到一个原始HTTP请求,您可以写入原始HTTP响应。因此,为AJAX调用公开端点是一种非常轻量级的方法。至于web和页面方法,这些方法正在慢慢消亡。约翰·桑德斯(John Saunders)有一篇博客,描述了不使用它的几个原因。他建议改为使用WCF,但从那时起,WebAPI就可以使用了。
<%@ Page Language="C#" CodeBehind="BasePage.aspx.cs" Inherits="MyProj.BasePage" %>
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body ID="BasePage_Body" runat="server">
<form id="form1" runat="server">
<div>
</div>
</form>
</body>
</html>
protected override void OnInit(EventArgs e)
{
base.OnInit(e);
//Adding this Client Side script for my Page
if (<someCondition>)
{
BasePage_Body.Attributes.Add("onunload", "HandleClose()");
Page.ClientScript.RegisterClientScriptBlock(typeof(Page), "MWGBrowserhandlingClose",
"<script language=\"JavaScript\">" +
"function HandleClose() {" +
"alert(\"Killing the session on the server!!\");" +
"PageMethods.AbandonSession();" +
"} </script>");
}
}