动态更改隐藏字段的值

时间:2012-06-26 14:58:38

标签: c# asp.net

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

我找到了有关通过JavaScript检索文件名(无扩展名)的教程。我认为即使表格在iframe中我仍然可以获得城市,但我想保留网站的惯例并尽可能使用C#。

非常感谢代码片段或指向可能解决方案的链接。

2 个答案:

答案 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";
}

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