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

C# 使用c保持隐藏的输入框名称相同,c#,asp.net,input,C#,Asp.net,Input,我正在尝试与支付网关集成。它们需要一组隐藏的输入框发布到网关,如: <input id="orderref" name="orderref" type="hidden" runat="server"/> 我添加了runat=server,以便可以用值动态填充框 但是,在运行时,输入框名称当然会更改为: <input name="ctl00$ContentPlaceHolder1$orderref" type="hidden" id="ContentPlaceHolder1_o

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

<input id="orderref" name="orderref" type="hidden" runat="server"/>
我添加了runat=server,以便可以用值动态填充框

但是,在运行时,输入框名称当然会更改为:

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

我陷入了困境。如果我删除runat=server,那么就名称而言,一切都很好,但是我无法用值填充输入框!是否有办法强制字段的名称保持不变?

如果您使用的是ASP.NET 4.0,则可以在上设置clientidmode=Static,这将使ID保持与您设置的完全相同。这方面有一些警告,但一般来说,应该适合您的需要


编辑:事实证明,他们需要名称属性是静态的,ClientIDMode不控制该属性,并且不能在ASP.NET中通过编程进行设置,它只控制id属性

如果您使用的是ASP.NET 4.0,则可以在上设置clientidmode=Static,这将使ID保持与您设置的完全一致。这方面有一些警告,但一般来说,应该适合您的需要


编辑:事实证明,他们需要名称属性是静态的,ClientIDMode不控制该属性,并且不能在ASP.NET中通过编程进行设置,它只控制id属性

根据您使用的.NET版本,此控件有所不同:基本上,.NET4之前的版本只能通过实现自己的来更改容器前缀,但从.NET4版本可以使用ClientMode

或者,您可以公开方法,例如,在页面或母版页上,然后使用内联脚本调用它们,内联脚本在呈现时进行评估

编辑:

为了详细说明我的第二个建议,您可以在页面代码隐藏中定义一个方法,该方法可以通过使用;引用的链接给出了这方面的简单示例,但方法不必像我前面提到的那样位于页面本身的块中,这样您就可以保持逻辑分离,例如:

在页面的代码隐藏中定义方法:

public string RenderMessage()
{
    return "This need not be a hard-coded string!";
}
写出您的输入元素,省略runat属性,并添加嵌入的代码块来代替将其视为占位符的值;此代码块将在预渲染时调用指定的方法,基本上由返回值替换:

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

根据您使用的.NET版本的不同,此控件有所不同:基本上,.NET4之前的版本只能通过实现自己的来更改容器前缀,但是从.NET4版本可以使用ClientMode

或者,您可以公开方法,例如,在页面或母版页上,然后使用内联脚本调用它们,内联脚本在呈现时进行评估

编辑:

为了详细说明我的第二个建议,您可以在页面代码隐藏中定义一个方法,该方法可以通过使用;引用的链接给出了这方面的简单示例,但方法不必像我前面提到的那样位于页面本身的块中,这样您就可以保持逻辑分离,例如:

在页面的代码隐藏中定义方法:

public string RenderMessage()
{
    return "This need not be a hard-coded string!";
}
写出您的输入元素,省略runat属性,并添加嵌入的代码块来代替将其视为占位符的值;此代码块将在预渲染时调用指定的方法,基本上由返回值替换:

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

我也努力解决这个问题,最终找到了以下解决方案: 在标记中,我有以下内容:

在codebehind中,我有一个受保护的变量: 保护字符串html

然后,我将此变量设置为:
html=

我也在努力解决这个问题,最终找到了以下解决方案: 在标记中,我有以下内容:

在codebehind中,我有一个受保护的变量: 保护字符串html

然后,我将此变量设置为:
html=

使用以下代码:

Page.ClientScript.RegisterHiddenFieldorderref,9

这将创建以下隐藏输入:


有关更多详细信息,请参见使用以下代码:

Page.ClientScript.RegisterHiddenFieldorderref,9

这将创建以下隐藏输入:


有关更多详细信息,请参见

您可以使用JavaScript抱歉,但我不想在我们的网站访问者中有8%的人关闭了JavaScript时依赖它!不久前我不得不写一些类似的东西,结果只是在页面上放了一个占位符,并直接用元素no runat=server填充。@Heinzi抱歉,但你能详细说明一下我是.net的noob吗?你可以用JavaScript对不起,但我不想依赖JavaScript,因为有8%的网站访问者关闭了它!不久前我不得不写一些类似的东西,结果只是在页面上放了一个占位符,并直接用elemen填充
ts no runat=server。@Heinzi抱歉,但你能详细说明我是noob at。我已经添加了代码,但我想保留的是名称属性,而不是ID。@ComfortablyNumb抱歉,在原始问题中遗漏了这一点。ClientIDMode只影响id属性。据我所知,您无法以编程方式设置runat=server的名称,因此可能会留下其他选项之一,如写入占位符,或删除runat=server并在运行时将值写入隐藏控件,尽管我没有使用您的解决方案。该信息将非常有用,因此感谢您的帮助。仅适用于id属性。名称属性无法控制。我添加了代码,但我要保留的是名称属性,而不是ID。@ComfortablyNumb抱歉,在原始问题中遗漏了这一点。ClientIDMode只影响id属性。据我所知,您无法以编程方式设置runat=server的名称,因此可能会留下其他选项之一,如写入占位符,或删除runat=server并在运行时将值写入隐藏控件,尽管我没有使用您的解决方案。该信息将非常有用,因此感谢您的帮助。仅适用于id属性。名称属性无法控制。抱歉,我没有获得第二位。我现在有点糊涂!请查看上的此链接。您错过了响应。请编写代码。除非您做出响应,否则RenderMessage字符串将不会显示在输入值上。写入它否,这不是真的。语法是响应的简写。写。@GuilhermeFerreira您正在编辑我的答案以破坏代码-toxaq是正确的。对不起,我没有得到第二位。我现在有点糊涂!请查看上的此链接。您错过了响应。请编写代码。除非您做出响应,否则RenderMessage字符串将不会显示在输入值上。写入它否,这不是真的。语法是Response.write的简写。@GuilhermeFerreira您正在编辑我的答案以破坏代码-toxaq是正确的。