2011-09-28 65 views
1

我正在尝试与支付网关进行集成。他们需要一组隐藏输入框被张贴到自己的网关,如:使用c保持隐藏的输入框名称相同#

<input id="orderref" name="orderref" type="hidden" runat="server"/> 

我已经加入RUNAT =“服务器”这样我就可以用动态值填充盒。

但是,当然在运行输入框中的名称被更改为:

<input name="ctl00$ContentPlaceHolder1$orderref" type="hidden" id="ContentPlaceHolder1_orderref" value="9" /> 

我在一个catch 22.我如果我删除RUNAT =“服务器”一切都很好至于名字,但我不能用值填充输入框!有没有办法强制该领域的名称保持不变?

+0

您使用JavaScript – albertjan

+0

对不起能够填充它们,但是我不希望依赖于JavaScript时好的8%您的网站访问者已将其关闭! – ComfortablyNumb

+1

我不得不在前段时间编写类似的东西,最后只是在页面上放置一个占位符,并用''元素(没有runat = server)直接填充它。 – Heinzi

回答

5

根据您所使用的控制什么.NET版本在此不同:基本上,前.NET4你只能.NET4您可以使用omit the container prefixes改变ClientIDMode通过实现自己的容器前缀,但

或者,您可以在页面或母版页上公开方法,然后使用在渲染时评估的内联脚本(<%=MyMethodReturningValue() %>)调用它们。

编辑:

要详细一点我的第二个建议,你可以在页面中定义的方法代码隐藏可以通过使用embedded code blocks内联的方式执行;引用的链接给出了简单的例子,但是这些方法不需要在页面本身的<script>块中(如我之前所说的),这样就可以保持逻辑分离,例如:

定义一个方法在你的页面的后台代码:

public string RenderMessage() 
{ 
    return "This need not be a hard-coded string!"; 
} 

写下你input元素,省略runat属性,并代替其中的值是(认为这是一个占位符)将嵌入代码块;这个代码块会调用预先渲染的指定方法,基本上是由返回值来代替:

<input id="orderref" name="orderref" type="hidden" value='<%=RenderMessage() %>'/> 
+0

对不起,我没有得到第二位。我现在有点小白! – ComfortablyNumb

+1

查看[ASP.NET中的嵌入式代码块](http://msdn.microsoft.com/zh-cn/library/ms178135.aspx)上的此链接。 –

+0

@先生失望 - 谢谢你们所有的工作! – ComfortablyNumb

3

如果您使用的是ASP.NET 4.0,则可以在<input>上设置clientidmode="Static",这将导致ID保持与您的设置完全相同。有这方面的警告,但总的来说应该为你的需求工作。

Documentation on ClientIDMode

编辑:事实证明,他们所需要的name属性是静态的,它的ClientIDMode不控制,并不能在ASP.NET编程设置,它只控制id属性。

+0

我已经添加了代码,但它的**名称**属性我想保留不ID。 – ComfortablyNumb

+0

@ComfortablyNumb对不起,错过了原来的问题。 ClientIDMode只影响id属性。就我所知,您无法以编程方式设置runat =“server”的名称,因此可能会留下其他选项之一,如写入占位符,或者删除runat =“server”并编写值在运行时与该隐藏控件配合使用<%=%> –

+0

虽然我没有使用您的解决方案。该信息将有用,所以感谢您的帮助。 – ComfortablyNumb

1

我也挣扎着这个问题,并最终找到了以下解决方案: 在标记我以下内容: <%=html %>

在代码隐藏我有一个受保护的变量: protected string html;

我然后设置此变量如下: html = "<input id='Express_Receipt_Email' type='hidden' value='" + sessionUser.EmailAddress + "' name='Express_Receipt_Email'>";

相关问题