我正在尝试与支付网关集成。它们需要将一组隐藏的输入框发布到其网关,如:
<input id="orderref" name="orderref" type="hidden" runat="server"/>
我添加了runat =“server”,因此我可以使用值动态填充框。
但是,当然在运行时输入框名称会更改为:
<input name="ctl00$ContentPlaceHolder1$orderref" type="hidden" id="ContentPlaceHolder1_orderref" value="9" />
我在捕获22.如果我删除runat =“server”关于名称一切都很好,但我不能用值填充输入框!有没有办法强制字段的名称保持不变?
答案 0 :(得分: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() %>'/>
答案 1 :(得分:3)
如果您使用的是ASP.NET 4.0,则可以在clientidmode="Static"
上设置<input>
,这将导致ID与您设置的完全一致。有一些警告,但一般来说应该满足您的需求。
编辑:事实证明,他们需要name属性是静态的,ClientIDMode不能控制,并且不能在ASP.NET中以编程方式设置,它只控制id属性。
答案 2 :(得分:3)
使用以下代码:
Page.ClientScript.RegisterHiddenField("orderref", "9")
这会创建以下隐藏输入:
<input id="orderref" name="orderref" type="hidden" value="9" />
有关详细信息,请参阅System.Web.UI.ClientScriptManager.RegisterHiddenField on MSDN
答案 3 :(得分:1)
我也在努力解决这个问题并最终找到了以下解决方案:
在标记中我有以下内容:
<%=html %>
在代码隐藏中我有一个受保护的变量:
protected string html;
然后我按如下方式设置此变量:
html = "<input id='Express_Receipt_Email' type='hidden' value='" + sessionUser.EmailAddress + "' name='Express_Receipt_Email'>";