首先,是的,我知道我不应该使用框架,但我没有选择。这是一个旧系统,它让我感到头疼,但网络工程师喜欢它,并要求这是他们的信息和页面必须去的地方。
我目前正在使用.NET 4.0框架,c#,虽然我怀疑这个问题很重要,但SQL Server 2008R2。
现在的问题:我需要一种方法来确定是选择了主硬件还是备用硬件,这样我才能正确设置单选按钮和页面加载的初始信息到 主要硬件或辅助硬件,基于加载的页面。我的页面正在使用的网站是第三方,我无权修改,所以我不能只将URL变量粘贴到该页面或更改设置。
网址包含变量,但它们是在网站的其他位置静态生成的,只能在我的网页所在的框架内显示。我从来没有真正使用过帧,所以我有点不知所措。更糟糕的是,由于设置和测试的方式,我实际上不确定如何在代码中设置任何断点以查看它的失败位置。
我想不出另一种解决方法,但我很乐意有一个解决方案不涉及这个框架 - 废话。
到目前为止,我一直在寻找这些指导,但没有取得多大成功。 sharing variables between urls and frames,msdn's .NET 4.0 page on Frames, 关于如何get url variables out of frames和loading pages in IFrame dynamically from the codebehind的帖子。
暂时,我被要求确保现有的页面不会中断,这就是为什么要检查而不是刚刚完成。它目前位于该网站的两个位置,一个没有框架和URL变量(管理员想要删除)和带有URL变量和框架的新家。现在,第一个不能打破,这就是为什么你会看到一些奇怪的检查和??操作
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
System.Web.UI.HtmlControls.HtmlGenericControl orionIFrame =
(System.Web.UI.HtmlControls.HtmlGenericControl)this.FindControl("pcmaframe");
if (orionIFrame != null)
{
string frameURL = orionIFrame.Attributes["src"].ToString() ?? "";
Uri frameURI = new Uri(frameURL);
NameValueCollection queryVars = HttpUtility.ParseQueryString(frameURI.Query);
//If this is in Orion, we want to change the canceller to standby if it's 97, not 96
if (queryVars["NetObject"] == "N:97" || queryVars["NetObject"] == "N%3a97")
{
SelectCanceller.SelectedValue = "Standby";
primaryStandby = false;
}
}
//Do some other stuff to generate page data
现在,生成框架的代码看起来像这样(其中[url]替换了实际的url,[mypage]替换了我用过的实际文件名):
NodeID - ${NodeID}<br>
Node Name - ${NodeName}
<iframe id="pcmaframe" src="[url]/[mypage].aspx?NetObject=N:" + ${NodeID} width = 1000 height = 1500>
</iframe>
目前,没有不良行为,它根本无法切换。无论URL变量如何,两个页面都显示主要页面。主要是N:96,次要是N:97。我检查的原因是我希望它在失败时显示某些内容,因此它默认为主硬件。
所以,精彩的Stack Overflow人......你能回答我的三个问题吗?
当我无法插入断点时,如何在不向页面添加输出的情况下对单独网站上的Frame进行故障排除?
我可以做什么而不是使用网址变量并弄乱这些框架?
我错过了什么逻辑或搞砸了我的代码导致框架/不/识别URL变量?
更新
好吧,到目前为止,我已确定该帧为空。不确定这是不是因为this.FindControl没有正确播放,或者是由于网站使用框架或任何其他东西的方式......
答案 0 :(得分:0)
在允许向页面添加一些调试输出后,我能够找到一个解决方法。基于一些测试和这些文章我认为发生了什么:
Better way to find control in ASP.NET
http://msdn.microsoft.com/en-us/library/txxbk90b%28v=vs.90%29.aspx
http://forums.asp.net/t/1097333.aspx
http://msdn.microsoft.com/en-us/library/system.web.ui.page.previouspage.aspx
使用我的程序/页面的网站是否具有比我的ASP更高级别的框架,而没有很多技术巫术。由于帧没有返回,我开始测试并发现调用帧实际上使用[URL]。[MyPage] .aspx?NetObject = N:97作为上一页或调用页面。在各种情况下都是如此,这意味着使用Request.UrlReferrer是半安全的:
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
string frameURL = Request.UrlReferrer.ToString() ?? "NO DATA";
if ((frameURL != null) && (frameURL != "NO DATA"))
{
Uri frameURI = new Uri(frameURL);
NameValueCollection queryVars = HttpUtility.ParseQueryString(frameURI.Query);
//If this is in Orion, we want to change the canceller to standby if it's 97, not 96
if (queryVars["NetObject"] == "N:97" || queryVars["NetObject"] == "N%3a97")
{
SelectCanceller.SelectedValue = "Standby";
primaryStandby = false;
}
}