ASP.NET如何在Javascript中设置隐藏字段的值?

27

我不知道如何在Javascript中设置hiddenField的值。有人能向我展示如何做吗?

Javascript:

document.getElementById('hdntxtbxTaksit').value = "";

HTML:

<asp:HiddenField ID="hdntxtbxTaksit" runat="server" Value="" Visible="false">   </asp:HiddenField>

错误: "无法获取属性'value'的值:对象为空或未定义"

9个回答

41

在ASP.Net 4.0之前

ClientID

获取在使用母版页的页面中生成的客户端 ID。由于母版页是 UserControl 类型,它将有自己的 ID,并将页面视为子控件并生成带有前缀如 ctrl_ 的不同 ID。

可以通过在页面中使用 <%= ControlName.ClientID %> 来解决这个问题,并可以将其分配给任何字符串或JavaScript变量,以便稍后引用。

var myHidden=document.getElementById('<%= hdntxtbxTaksit.ClientID %>');
  • 如果您使用主页面,Asp.net服务器控件ID将会变化。

ASP.Net 4.0 +

ClientIDMode 属性

使用该属性来控制您想要生成的ID的方式。对于您的情况,在页面级别设置ClientIDMode="static"将解决问题。在控件级别上也可以应用同样的方法。


2
如果您正在使用Asp.NET用户控件,您可以在默认页面注册时声明ClientIDMode。这样,整个页面的ID将是静态的,也就是“真实的ID”。 - M H
关于ClientIDMode="static"的一个小提示 - 当您设置此属性时,一些第三方控件会出现问题...所以一定要进行测试! - Eric Burdo

15

asp:HiddenField即ASP.NET中的隐藏字段:

<asp:HiddenField runat="server" ID="hfProduct" ClientIDMode="Static" />

JavaScript代码:

$("#hfProduct").val("test")

并且它的代码如下:

hfProduct.Value.ToString();

1
请适当格式化您的代码并提供更多解释。 - schaueho

6
  • 首先需要正确创建隐藏域:

    <asp:HiddenField ID="hdntxtbxTaksit" runat="server"></asp:HiddenField>

  • 然后需要为隐藏域设置值:

    如果您没有使用 Jquery,请使用以下代码:

    document.getElementById("<%= hdntxtbxTaksit.ClientID %>").value = "test";

    如果您使用 Jquery,请使用以下代码:

    $("#<%= hdntxtbxTaksit.ClientID %>").val("test");


你的例子中需要加上 # 符号吗?我在没有添加该符号的情况下,它可以正常工作。 - Mmm

3
document.getElementById('<%=hdntxtbxTaksit.ClientID%>').value

您在服务器中设置的id是服务器id,与客户端id不同。


3
尝试使用以下代码:
$('hdntxtbxTaksit').val('test');

1

我怀疑你需要在JavaScript代码中使用ClientID而不是字面上的ID字符串,因为你已经将该字段标记为runat="server"

例如,如果你的JavaScript代码在一个aspx文件中(而不是一个单独的JavaScript文件):

var val = document.getElementById('<%=hdntxtbxTaksit.ClientID%>').value;

如果它在一个不被 ASP.Net 渲染的单独的 JavaScript 文件中,你就必须另找方法来找到它,比如通过 class。

1
我的理解是,如果在页面初始加载期间设置 controls.Visible = false,则该控件不会呈现在客户端响应中。我的建议是:不要使用占位符,从情景来看,您实际上不需要占位符,除非在服务器端需要动态添加控件。使用 div,不带runat = server。您始终可以使用 css 控制该 div 的可见性。如果以后需要动态添加控件,请使用占位符,但不要设置visible=false。占位符无论如何都不会显示,使用 css 设置该占位符的可见性。以下是编程方式的示例:
placeholderId.Attributes["style"] = "display:none";

无论如何,正如其他人所述,您的问题是因为一旦设置control.visible = false,它就不会在客户端响应中呈现。

0
我建议您使用HiddenField的ClientID。首先在codebehind中将其客户端ID注册到任何Javascript变量中,然后在客户端脚本中使用它,如下所示:
.cs文件代码:
ClientScript.RegisterStartupScript(this.GetType(), "clientids", "var hdntxtbxTaksit=" + hdntxtbxTaksit.ClientID, true);

然后在JS中使用以下代码:

document.getElementById(hdntxtbxTaksit).value= ""; 

0

尝试将Javascript值设置为document.getElementByName('hdntxtbxTaksit').value = '0';


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接