1

对于现有网站,我必须从由不同页面(例如 City1.aspx、City2.aspx、City3.aspx 等)加载的表单中传递隐藏字段中的值,但它们是在 iframe 中加载的。我还必须根据加载它的城市页面动态更改至少一个隐藏字段(我们称之为“源”)的值。我熟悉 PHP 和 JavaScript/JQuery,但我不知道如何在 C# 中执行此操作。

我找到了有关通过 JavaScript 检索文件名(无扩展名)的教程。我认为即使表单位于 iframe 中,我仍然可以获得城市,但我想遵守网站的约定并尽可能使用 C#。

非常感谢您提供可能的解决方案的代码片段或链接。

4

2 回答 2

2

如果您想修改与您的 aspx 相关联的 c# 中的输入值(代码隐藏),则必须将属性 runat=server 添加到您的输入中。

在您的 aspx 中使用此代码

<input id="test" type="hidden" runat="server"/>

在你的 C#

test.Value = 123; //your value is 123 for example
于 2012-06-26T15:09:46.137 回答
1

免责声明,我不知道 JQuery,所以可能有更简单的方法来做到这一点。我也没有测试任何代码......

如果您知道确切的 ID,那么您可以从父页面(在 javascript 块中)执行类似的操作:

var frame = document.getElementById('myIFrame');
var ctrl = frame.document.getElementById('myControl');
ctrl.value = "New Value";

如果您不知道CityX.aspx页面中控件的确切 ID,那么您将需要一种方法来发现这些 ID,或者您需要遍历所有控件以iframe查找正确的 ID。(我这样说是因为如果iframe页面中的控件保存在任何类型的 ASP.NET 结构中,它们将不会被调用txtMyCtrl(例如),但可能类似于ct00_txtMyCtrl.)

如果您不知道确切的控件名称(因为我之前提到的 ASP.NET 结构),您可以执行以下操作:

var frame = document.getElementById('myIFrame');
var ctrls = frame.document.getElementByTagName("INPUT");
for(var i=0;i<ctrls.length;i++){
  if(ctrls[i].getAttribute("type")=="hidden" && ctrls[i].id.indexOf("_myControl") != -1){
    ctrls[i].value = "New Value";
    break;
  }
}

或者,如果您有能力更新CityX.aspx页面,那么您可以在CityX.aspx页面中包含以下内容:

function getCtrls(){
  return [document.getElementById("<%=hiddenCtrl.ClientID%>"),
          document.getElementById("<%=anotherHiddenCtrl.ClientID%>")];
}

...然后在您的父页面中,例如:

var frame = document.getElementById('myIFrame');
var ctrls = frame.document.getCtrls();
for(var i=0;i<ctrls.length;i++){
  ctrls[i].value = "New Value";
}

它们只是关于一般主题的想法

于 2012-06-26T15:43:15.790 回答