c# - HiddenField 始终为 NULL,来自 javascript

标签 c# javascript jquery asp.net

当执行右键单击时,我创建了一个上下文菜单并与 Gridview 关联。问题是,当从该上下文菜单中按下按钮时,我想从 HiddenField 获取值。但它总是返回 null。我一直在阅读,我认为这可能是因为 DOM 未完全加载,但我无法使用 $( document ).ready() 解析它。可能使用方式错误。

如果您有任何想法,请告诉我

HTML:

<asp:Content ID="Content1" ContentPlaceHolderID="HeadContent" runat="server">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
<script type="text/javascript" src="../../../Scripts/PendientesDataGridContextMenu.js"></script>
<link href="../../../Styles/ContextMenu.css" rel="stylesheet" type="text/css" />

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

<asp:HiddenField ClientIDMode="static" runat="server" ID="hdnSomeField" />
<asp:HiddenField ClientIDMode="static" ID="fldNumeroCQCallTx" runat="server"  />
<asp:HiddenField ID="fldNumeroCQMalaPractica" runat="server"  />

<div id="myMenu" class="contextMenu">
<table style='width:100%;'>
<tr><td onclick="fnCargarfldNumeroCQCallTxYClickear();">Registrar</td></tr>
<tr><td onclick="fnDelete();">Registrar2</td></tr>
</table>
</div>

<asp:LinkButton ID="lnkCallTx" runat="server"
style="display:none" OnClick="lnkCallTx_Click" />

C# 代码:

protected void Page_Load(object sender, EventArgs e)
    {
        //Associate Context Menu to Gridview
        Page.ClientScript.RegisterStartupScript(GetType(), "Script", "fnLinkearContextMenu(); ", true);

    }

Java 脚本:

function fnLinkearContextMenu() {

    $("#myMenu").hide();

    $("table[id$='cntMainPlaceHolder_MainContent_PendientesGestionDeTareasDataGridView'] > tbody > tr").bind('contextmenu', function (e) {
        $("#myMenu").hide();
        e.preventDefault();
        $("#myMenu").css({
            top: e.pageY + "px",
            left: e.pageX + "px",
            position: 'absolute'
        });

        //document.getElementById('<%= lnkCallTx.ClientID %>').value = rowid;
        $("#myMenu").show();

    });

    //Cuando realizan click izquierdo en otra parte de la pagina

    $(document).bind('click', function (e) {
        $("#myMenu").hide();
    });

};

function fnCargarfldNumeroCQCallTxYClickear() {

    var lnkView = document.getElementById('<%=lnkView.ClientID %>').value;
    var lnkCallTx = document.getElementById('lnkCallTx');

    lnkCallTx.click();
};

最佳答案

您无法从隐藏字段中获取值的原因与服务器标签有关。在这种情况下,<% %> 被称为服务器标记,因此它们必须命中后面的代码(aspx.cs 文件)才能解析传入的值。在 .js 文件中,没有后面的代码,因此,它只是将静态字符串放入输出脚本中,而不是解析该值。

脚本:

document.getElementById('<%= lnkView.ClientID %>').value;

.aspx 文件输出:

document.getElementById('cntMainPlaceHolder_MainContent_lnkView').value;

.js 文件输出:

document.getElementById('<%= linkView.ClientID %>').value;

为了证明这一点,您可以在您正在使用的浏览器(最有可能是 f12)中打开代码检查器并查看包含的脚本。您将看到其中有 <% 标签,这些标签应该已被解析。同样的概念也适用于 JQuery:

$('#<%= lnkView.ClientID %>').val();

关于c# - HiddenField 始终为 NULL,来自 javascript,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21284783/

相关文章:

c# - "params"和 "array parameter"有什么区别,应该在什么时候使用?

javascript - 更改事件如何在单选按钮上工作

c# - 使用C#打开PDF——Windows 8 Store应用程序

JavaScript 日期引用或值

Javascript - 处理多维数组

javascript - 如何利用浏览器宽度和body宽度动态计算固定div元素的定位宽度

JAVASCRIPTscrollLeft平滑滚动而不跳跃

javascript - jQuery - 方法链接的插件和命名空间问题

c# - 从 MonoTouch 中引用的 DLL 获取执行程序集名称?

c# - 从一个程序获取变量到另一个程序