2009-07-21 88 views
1

我正在制作一个带有大量顶级链接列表的FYI页面。在这些顶级链接下,通常会有更多的链接发布到外部网站。目前,我处理填充第二层的方式是这样的:我查询我的数据库中的所有顶层链接,然后构造一个无序列表。每个列表项的格式为:如何在单击链接时填充隐藏字段?

<li class="multicolumnlistitem"><a href="linkpage.aspx?s={0}">Link Text</a></li> 

其中,{0}是项目的ID。我想消除在URL中传递ID的需要。有人向我建议,我使用客户端脚本在点击某个链接时动态填充隐藏字段的值,然后阅读链接页面上的表单值。

任何想法/示例/资源将不胜感激。

谢谢!

更新

这里是我迄今下来了代码:

<form id="stateform" action="StateFyi/StateFyiView.aspx" method="post"> 
<p> 
    <input type="hidden" id="idfield" name="s" runat="server" /> 
    <% 
     GSDataLayer.Fyi.States StateManager = new GSDataLayer.Fyi.States(); 

     var stateList = StateManager.GetStateList(); 

     foreach (GSDataLayer.Fyi.States.State s in stateList) 
     { 
      stateListOutput.Text += 
      string.Format("<li class=\"multicolumnlistitem\"><a href=\"javascript:document.getElementById('{0}').value='{1}';document.stateform.submit();\">{2}</a></li>\n", 
      new string[] {idfield.ClientID, s.ID.ToString(), s.Name}); 
     }   
    %> 
    <ul class="multicolumnlist"> 
     <asp:Literal ID="stateListOutput" runat="server" Text="No Items!" /> 
    </ul> 
</p> 
</form> 

剩下的唯一障碍是JavaScript(或按上述格式,或原始document.getElementById('stateform'))用于返回null表格。我无法将“runat = server”添加到此表单中,因为页面上已经有一个表单。此预先存在的表单是我用来正常运行的CMS所必需的。关于从哪里出发的任何想法?

谢谢!

+1

不要这样做。否则,您的网站将无法使用JavaScript。 – 2009-07-21 15:52:22

+0

好点。将考虑这一点。 – Anders 2009-07-21 17:31:29

回答

2

你的意思是这样的:

<form id="myform" action="linkpage.aspx" method="POST"> 
<input type="hidden" id="idfield" name="s" /> 
</form> 
... 
<li class="multicolumnlistitem"><a href="javascript:document.getElementById('idfield').value='0';document.getElementById('myform').submit();">Link Text</a></li> 
+0

就是这样。但是,它尚未提交。我将不得不看看我为什么不能看到,然后我会回复。 – Anders 2009-07-21 14:52:57

+0

FireBug说:“document.getElementById(”idfield“)为空” – Anders 2009-07-21 15:00:10

+0

并根据源视图: 。我是否必须容纳ASP放在ID字段中的额外文本? – Anders 2009-07-21 15:02:37