对于现有网站,我必须从不同页面加载的表单(例如,City1.aspx,City2.aspx,City3.aspx等)中传递隐藏字段中的值,但它们会加载到iframe中。我还必须根据加载它的城市页面动态更改至少一个隐藏字段(让我们称之为“源”)的值。我熟悉PHP和JavaScript / JQuery,但我不知道如何在C#中执行此操作。
我找到了有关通过JavaScript检索文件名(无扩展名)的教程。我认为即使表格在iframe中我仍然可以获得城市,但我想保留网站的惯例并尽可能使用C#。
非常感谢代码片段或指向可能解决方案的链接。
答案 0 :(得分:2)
如果你想修改与你的aspx相关的c#中的输入值(代码隐藏),你必须在输入中添加属性runat = server。
在您的aspx中使用此代码
<input id="test" type="hidden" runat="server"/>
和你的c#
test.Value = 123; //your value is 123 for example
答案 1 :(得分:1)
免责声明,我不了解JQuery,因此有更简单的方法可以做到这一点。我还没有测试任何代码...
如果您知道确切的ID,那么您可以从父页面(在javascript块中)执行以下操作:
var frame = document.getElementById('myIFrame');
var ctrl = frame.document.getElementById('myControl');
ctrl.value = "New Value";
如果您不知道CityX.aspx
页面中控件的确切ID,那么您将需要一种方法来发现这些ID,或者您需要遍历iframe
内的所有控件。 {1}}寻找正确的。 (我这样说是因为如果iframe
页面中的控件保存在任何类型的ASP.NET结构中,它们将不会被称为txtMyCtrl
(例如),但可能类似于ct00_txtMyCtrl
。 )
如果您不知道EXACT控件名称(因为我之前提到的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";
}
他们只是关于一般主题的想法