使用c#保持隐藏的输入框名称相同

时间:2011-09-28 12:41:01

标签: c# asp.net input

我正在尝试与支付网关集成。它们需要将一组隐藏的输入框发布到其网关,如:

<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”关于名称一切都很好,但我不能用值填充输入框!有没有办法强制字段的名称保持不变?

4 个答案:

答案 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与您设置的完全一致。有一些警告,但一般来说应该满足您的需求。

Documentation on ClientIDMode

编辑:事实证明,他们需要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'>";