如何将隐藏的 input HTML 标签插入到 ASP.NET 页面中,以防止 ID 或 name 属性被重写






4.33/5 (2投票s)
如何将隐藏的 input HTML 标签插入到 ASP.NET 页面中,以防止 ID 或 name 属性被重写。
引言
最近,我被要求与一个支付网关进行接口,该网关要求我通过隐藏的 input 字段发布信息。我遇到了问题,特别是 ASP.NET 重写了我的 input ID 的名称,导致网关忽略它们。我尝试了几种不同的方法来解决这个问题,但由于我正在使用母版页,似乎没有任何效果。
解决方案 1
我的解决方案是创建一个自定义控件。我包含了 “name
”、“id
” 和 “value
” 属性。简单来说,这个控件将输出 “<input type="hidden" name="" id="" value="" />
” ,并使用每个属性的值。
这是控件的代码
using System;
using System.ComponentModel;
using System.Text;
using System.Web.UI;
using System.Web.UI.WebControls;
namespace WebCustomControls.HiddenField
{
[DefaultProperty("Value")]
[ToolboxData("<{0}:hiddenField runat="server"></{0}:hiddenField>")]
public class hiddenField : WebControl
{
[Bindable(false)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Value
{
get
{
var s = (String)ViewState["Value"];
return (s ?? String.Empty);
}
set
{
ViewState["Value"] = value;
}
}
[Bindable(false)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public override string ID
{
get
{
var s = (String)ViewState["ID"];
return (s ?? String.Empty);
}
set
{
ViewState["ID"] = value;
}
}
[Bindable(false)]
[Category("Appearance")]
[DefaultValue("")]
[Localizable(true)]
public string Name
{
get
{
var s = (String)ViewState["Name"];
return (s ?? String.Empty);
}
set
{
ViewState["Name"] = value;
}
}
protected override void RenderContents(HtmlTextWriter output)
{
var sb = new StringBuilder();
sb.AppendFormat(@"<input type=""hidden"" " +
@"name=""{0}"" id=""{1}"" value=""{2}"" />",
Name, ID, Value);
output.Write(sb.ToString());
}
}
}
由于我正在通过代码动态添加这些标签,ASP.NET 生成的 HTML 将如下所示。ASP.NET 添加了 span
标签,但我可以接受。
<span id="ctl00_ctl07">
<input type="hidden" name="CID" id="CID" value="123456" />
</span>
<span id="ctl00_ctl08">
<input type="hidden" name="AMOUNT" id="AMOUNT" value="1" />
</span>
以下是一些示例 VB 代码,用于将新控件的实例添加到你的表单
Dim hidElem As New hiddenField()
hidElem.EnableViewState = False
hidElem.ID = id
hidElem.Name = id
hidElem.Value = val
Me.Form.Controls.Add(hidElem)
解决方案 2
在解决这个问题的过程中,我发现了一个更好、更简单的解决方案。显然,Microsoft 已经将解决方案包含在 CLR 中。
只需使用
ClientScript.RegisterHiddenField("name","value")
还有一件事
我还需要根据配置文件中的内容,发布到动态 URL。我发现我可以这样设置表单变量
Me.Form.Method = "post"
Me.Form.Action = URL
或者更好的是,直接将 URL 包含在 Button
控件的 PostBackUrl
中。
buttonYes.PostBackUrl = URL