【问题标题】:HTML/ASP.NET: <input type="hidden" name="reference" value="ABC"/>HTML/ASP.NET: <input type="hidden" name="reference" value="ABC"/>
【发布时间】:2011-03-10 10:53:48
【问题描述】:

我只想问是否有可能改变:

<input type="hidden" name="reference" value="ABC"/>

进入这个:

<input type="hidden" name="reference" value="any values I want"/>

我可以在 .cs/C# 后面设置任何值 - 使其动态化。我使用的支付网关需要并且我找不到包含 ASP.NET 控件的方法(?) 我需要你的建议/cmets。谢谢。

PS。 &lt;asp:HiddenField ID="reference" runat="server" Value="ABC" /&gt; 不起作用,因为支付网关特别需要 'name' 属性。

【问题讨论】:

    标签: asp.net html dynamic-data user-input payment-processing


    【解决方案1】:

    我知道这是一篇旧帖子,但对于现在希望解决此问题的任何人 - 如果您在输入中添加 runat="server",名称将被更改(例如 MainContentArea_ctl00_ctl01_ctl01_amount)。 ClientIdMode="Static" 只会对 ID 有所帮助。 要解决这个问题:

    在您的 html 页面中使用 Literal :

        <asp:Literal runat="server" ID="litInputAmount"></asp:Literal>
    

    在代码隐藏文件中,为 Literal 的 Text 属性分配一个字符串。该字符串应该是您希望的 html。也可以为 value 字段添加正确的值:

        litInputAmount.Text = String.Concat("<input id='inputAmount' type='hidden' name='amount' value='", Price.ToString(), "'>");
    

    这将被编译为:

        <input id="inputAmount" type="hidden" value="224.4" name="amount">
    

    这会将信息以正确的名称提供给支付网关,但您的值可以动态管理。对发送前需要添加的任何其他值重复此操作。

    【讨论】:

      【解决方案2】:

      您只需将runat="server" 放在控件上,即可从您后面的代码中访问它:

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

      然后,在你的代码后面:

      void Page_Load(object sender, EventArgs e)
      {
          // ...
      
          reference.Attriutes["value"] = "any values I want";
      
          // ...
      }
      

      请注意,在这种情况下,“id”属性是必需的,因为当您拥有runat="server" 时,id 属性用于指定生成的变量的名称。

      【讨论】:

      • 其实你不需要 Attributes 属性。由于 ASP.NET 在添加 runat="server" 时使其成为 HtmlInputHidden 类型的控件,因此您可以直接编写:reference.Value = "any values I want"; 更多信息:msdn.microsoft.com/en-us/library/…
      • ...但不幸的是,此解决方案会将“name”属性从“reference”更改为“MainContentArea_ct100”...等等。
      【解决方案3】:

      您可以像使用静态 HTML 或 Razor 一样使用隐藏类型的标准输入,并依赖 &lt;%= 表达式,该表达式在渲染时进行评估,而不是在 DataBind() 时间进行评估,因为 &lt;%# 表达式会.

      这样,您可以拥有一个普通的 html,您可以让 ASP.NET WebFroms 为您的服务器端生成隐藏输入的值,而实际上不必使用runat="server" 或使用&lt;asp:HiddenInput 控件标记输入。请参阅下面的示例,它应该可以完成这项工作:

      <input type="hidden" id="add-to-wishlist-url" value='<%= YourServerSideExpressionHere.Execute() %>' />
      

      当然,这种方法并非一刀切,但似乎最接近 7 年前描述的要求...

      【讨论】:

        【解决方案4】:

        //<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" /> protected string GetVariableValue(string AspxPage, string inputTagName) { ra migirad string RegPattern = string.Format("(?<=({0}\".value.\")).*(?=\"./>)", inputTagName); Regex regex = new Regex(RegPattern, RegexOptions.IgnoreCase); Match match = regex.Match(AspxPage); if (string.IsNullOrEmpty(match.Value)) { RegPattern = string.Format("<input[^>]*{0}[^>]*value=\"([^\"]*)\"", inputTagName); regex = new Regex(RegPattern, RegexOptions.IgnoreCase); match = regex.Match(AspxPage); return match.Groups[1].Value; } return match.Value; }

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2013-04-24
          • 1970-01-01
          • 1970-01-01
          • 2014-11-21
          • 1970-01-01
          • 2020-02-25
          相关资源
          最近更新 更多