Прежде всего, да, я знаю, что я не должен использовать фреймы, но у меня нет выбора. Это старая система, которая вызвала у меня ничего, кроме головных болей, но сетевые инженеры любят ее и требуют, чтобы это было там, где их информация и страницы должны были идти.Получите URL-адреса переменных и перейдите к Codebehind
В настоящее время я использую платформу .NET 4.0, C#, и, хотя я сомневаюсь, что это важно для этого вопроса, SQL Server 2008R2.
Проблема, как она стоит прямо сейчас: Мне нужен способ, чтобы определить, будет ли выбран основной или резервный аппаратный, так что я могу правильно установить переключатель и начальную информацию о загрузке страницы в либо первичного оборудования или на основе которой загружается страница. Веб-сайт, на котором моя страница используется, является третьей стороной, которой у меня нет доступа к изменению, поэтому я не могу просто привязать переменные URL к этой странице или изменить настройки.
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. Причина, по которой я проверяю, заключается в том, что мне бы хотелось, чтобы она отображала что-то в случае сбоя, поэтому по умолчанию используется основное оборудование.
Итак, замечательные люди переполнения стека ... Можете ли вы ответить на любой из моих трех вопросов?
Как устранить неполадки с кадром на отдельном веб-сайте без добавления вывода на страницу, если у меня нет возможности вставить точки останова?
Что я могу сделать вместо использования переменных URL и возиться с этими фреймами?
Какую логику я пропускаю или закручиваю в своем коде, который вызывает фрейм/not/распознает переменную URL?
UPDATE
Ну, до сих пор, я определил, что кадр является недействительным. Не уверен, что это из-за этого. FindControl не выполняется должным образом, или это связано с тем, как веб-сайт использует фреймы или любое количество других вещей ...