【问题标题】:Dynamically change value of hidden field动态改变隐藏字段的值
【发布时间】:2012-06-26 14:58:38
【问题描述】:

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

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

非常感谢代码 sn-ps 或指向可能解决方案的链接。

【问题讨论】:

  • 我是否理解正确,您需要更改在嵌入到您的 .aspx 文件中的 iframe 中加载的隐藏字段的值?因此,您无法直接在服务器端访问您需要更改的隐藏字段(如果我理解您的问题)
  • 有什么理由不能在更新面板中使用隐藏字段控件而不是 iframe?
  • iframe 中的页面是否来自同一个域?如果没有,您将遇到“跨域策略”问题。
  • 编码大猩猩:我的任务是向表单添加隐藏字段(完成),现在我只需要设置值,除了城市是基于加载它的页面。蒂姆:我没有建立这个网站,客户希望保持原样 - 一个由多个页面加载的通用表单,与不同的办公地点相关联。 Freefaller:它们托管在同一个域上。感谢您的快速回复。

标签: c# asp.net


【解决方案1】:

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

在您的 aspx 中使用此代码

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

在你的 c# 中

test.Value = 123; //your value is 123 for example

【讨论】:

  • 我对“runat”一点也不熟悉,但这给了我一些很好的工作。非常感谢!
  • 我很高兴解决您的问题
【解决方案2】:

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

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

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

如果您不知道 CityX.aspx 页面中控件的确切 ID,那么您将需要一种方法来发现这些 ID,或者您需要检查 iframe 中的所有控件寻找正确的。 (我这样说是因为如果 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";
}

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

【讨论】:

  • 这个。是。惊人的!很棒的功能选项。 :D 会立即尝试。
  • @John,你把它整理好了吗?请记住,我们是来尝试和帮助的,但我们非常感谢在必要时获得奖励(提示,提示);-)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-09-22
  • 1970-01-01
  • 2017-06-09
相关资源
最近更新 更多