从Code Behind调用JavaScript函数无法填充getElementbyID

时间:2014-09-30 02:13:46

标签: javascript asp.net forms getelementbyid

我必须在发布的表单中填充隐藏的元素。单击发布表单的按钮时,元素将被填充。

<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolder1" Runat="Server">
    <!-- setting all the hidden fields --->
    <script type="text/javascript" >
        function fnGetPara() {
            document.getElementById('EPS_MERCHANT').value     = bta_merchant;
            document.getElementById('EPS_TXNTYPE').value      = bta_txntype;
            document.getElementById('EPS_REFERENCEDID').value = bta_referenceId;
            document.getElementById('EPS_AMOUNT').value       = bta_amount;
            document.getElementById('EPS_TIMESTAMP').value    = bta_timestamp;
            document.getElementById('EPS_FINGERPRINT').value  = bta_fingerprint;
            document.getElementById('EPS_RESULTURL').value    = bta_jumpback;
        }
    </script>
    <!-- finish setting all the hidden fields --->
<form method="post" action="https://....." id="form1" runat="server">
 <div class="docdisplay">     
    <!-- merchant -->
    <input type="hidden" name="EPS_MERCHANT"  id="EPS_MERCHANT" />
    <!-- transaction -->
    <input type="hidden" name="EPS_TXNTYPE"   id="EPS_TXNTYPE" />
    <!-- reference -->
    <input type="hidden" name="EPS_REFERENCEDID" id="EPS_REFERENCEDID"/>
    <!-- amount to be paid -->
    <input type="hidden" name="EPS_AMOUNT"  id="EPS_AMOUNT" />
    <!-- Timestamp -->
    <input type="hidden" name="EPS_TIMESTAMP" id="EPS_TIMESTAMP"/>
     <!-- fingerprint -->
    <input type="hidden" name="EPS_FINGERPRINT" id="EPS_FINGERPRINT" />
    <!-- where we want to go after the payment -->
    <input type="hidden" name="EPS_RESULTURL" id="EPS_RESULTURL" />
    ....
</div>
<div class="docbuttons">
   <asp:Button ID="lblauth" runat="server" Text="Authorise payment" OnClick="lblauth_Click"  />
</div>

和方法:

protected void lblauth_Click(object sender, EventArgs e)
{
    // get bank transaction data
    bankTransAct.setTransactValues(orderId, invoiceNo, orderpaid, out bta_merchant, out bta_pw, out bta_txntype, out bta_amount, out bta_referenceId, out bta_timestamp, out bta_fingerprint);

    Page.ClientScript.RegisterStartupScript(this.GetType(), "CallfnGetPara", "fnGetPara()", true);
}

&#34; bankTransAct&#34; 方法收集这些隐藏字段的值。

我已尝试使用EPS或没有.value的id值。 bta_fields字段的定义如下:

public partial class smsfannrm5 : System.Web.UI.Page
{
//global variables 
....

string  bta_merchant    = string.Empty;
string  bta_pw          = string.Empty;
string  bta_txntype     = string.Empty;
decimal bta_amount      = 0;
string  bta_referenceId = string.Empty;
string  bta_timestamp   = string.Empty;
string  bta_fingerprint = string.Empty;
string  bta_jumpback    = string.Empty;

protected void Page_Load(object sender, EventArgs e)
{........

每次跟踪页面时都会显示隐藏的字段未填充?! 当我手动填充隐藏字段时,页面可以正常工作。

感谢任何反馈。我看不出我犯了什么错误?

1 个答案:

答案 0 :(得分:2)

看起来你正试图做至少一个:

  • 访问ASP.NET变量,例如来自JavaScript的bta_merchant;或
  • 让ASP.NET代码隐藏读取未标记为input
  • 的HTML runat="server"的值

这不起作用,因为客户端的JavaScript引擎未连接到ASP.NET服务器后端。

我在这里猜测你的用例,但我认为你想做的是制作所有隐藏的input服务器端控件,即可以从你的代码隐藏C#中访问。如果是这种情况,请将它们声明为

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

然后从代码隐藏中设置它们的值,而不是JavaScript。您可以在回复后阅读其值,或者如果您要提交给第三方支付网关或其他任何内容,它们将与表单数据一起提交。

如果需要从JavaScript访问HTML元素,ASP.NET将呈现与C#属性名称不同的ID属性,因此您需要使用ClientID属性:

<script>
var element = document.getElementById('<%= serverSideObject.ClientID %>');
</script>

如果生成的客户端元素的名称和ID很重要,并且您不需要返回该值(即,如果表单永远不会被回发),那么您可以执行此操作相反:

在这种情况下,你会写这样的东西:

<input type="hidden" name="whatever"  id="whatever" value="<%= someCSharpExpression %>" />

请注意,该元素不是服务器端元素;它没有runat="server"属性。因此,ASP.NET不会破坏元素名称或ID。 ASP.NET正在做的唯一特殊事情是评估someCSharpExpression,将其转换为字符串,然后插入而不是<%= … %>