我必须在发布的表单中填充隐藏的元素。单击发布表单的按钮时,元素将被填充。
<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)
{........
每次跟踪页面时都会显示隐藏的字段未填充?! 当我手动填充隐藏字段时,页面可以正常工作。
感谢任何反馈。我看不出我犯了什么错误?
答案 0 :(得分:2)
看起来你正试图做至少一个:
bta_merchant
;或input
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
成为常规的旧HTML表单元素,不成为服务器端元素<%= … %>
)(see introduction to inline expressions here)添加正确的值在这种情况下,你会写这样的东西:
<input type="hidden" name="whatever" id="whatever" value="<%= someCSharpExpression %>" />
请注意,该元素不是服务器端元素;它没有runat="server"
属性。因此,ASP.NET不会破坏元素名称或ID。 ASP.NET正在做的唯一特殊事情是评估someCSharpExpression
,将其转换为字符串,然后插入而不是<%= … %>
。