【问题标题】:Setting a value to a HiddenField in ASP.NET 4.5在 ASP.NET 4.5 中将值设置为 HiddenField
【发布时间】:2014-06-16 19:26:42
【问题描述】:

我在为 ASP.NET 4.5 中的 HiddenField 设置值时遇到了一些问题。

据我所见,我尝试了以下方法,但没有任何运气:

在 ASPX 中:

<asp:HiddenField ID="HiddenField" runat="server" value="" />
<script type="text/javascript">
    function SetHiddenField() {
        var vv = "HELLO WORLD";
        document.getElementById('<%=HiddenField.ClientID%>').value = vv;            
    }
</script>

在代码隐藏中:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true);
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('" + HiddenField.ClientID + "');", true);

这会在 ClientID 中提醒垃圾。

我尝试过的另一个解决方案如下。

在 .ASPX 中:

<asp:HiddenField ID="HiddenField" runat="server" value="" />
<script type="text/javascript">
    function SetHiddenField() {
        var vv = "HELLO WORLD";
        document.getElementById('HiddenField').value = vv;            
    }
</script>

这里的一个问题是 IntelliSense 中不存在 .value,只有 .ValueOf

在代码隐藏中:

ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true);
ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert('" + HiddenField.Value + "');", true);

什么都没有发生,可能是 JavaScript 中的错误,因为没有显示警报。

谁能指点我正确的方向,好吗?

【问题讨论】:

  • 在第二个示例中,除非您在隐藏字段 ClientIDMode="Static" 上设置属性,否则您仍然必须通过客户端 ID 获取元素

标签: c# javascript asp.net


【解决方案1】:

您的第一个标记很好:

<asp:HiddenField ID="HiddenField" runat="server" value="" />
<script type="text/javascript">
    function SetHiddenField() {
        var vv = "HELLO WORLD";
        document.getElementById('<%=HiddenField.ClientID%>').value = vv;
    }
</script>

把代码改成这样(检查第二行):

 ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true);
 ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "alert", "alert(document.getElementById('" + HiddenField.ClientID + "').value);", true);

输出应该是这样的:

编辑: 在您的场景中,您可以运行 javascript 来获取一个值并强制回发以在您的代码中使用该值。我会将我的标记更改为:

<script type="text/javascript">
    function SetHiddenField() {
        var vv = "HELLO WORLD";
        document.getElementById('<%=HiddenField.ClientID%>').value = vv;
        __doPostBack('<%=HiddenField.ClientID%>', '')
    }
</script>

在代码中,我的 Page_Load 如下所示:

protected void Page_Load(object sender, EventArgs e)
{

    if (!IsPostBack)
    {
        // Register JavaScript which will collect the value and assign to HiddenField and trigger a postback
        ScriptManager.RegisterStartupScript(this.Page, this.GetType(), "SetHiddenField", "SetHiddenField();", true); 
    }
    else 
    {
        //Also, I would add other checking to make sure that this is posted back by our script
        string ControlID = string.Empty;
        if (!String.IsNullOrEmpty(Request.Form["__EVENTTARGET"]))
        {
            ControlID = Request.Form["__EVENTTARGET"];
        }
        if (ControlID == HiddenField.ClientID) 
        { 
            //On postback do our operation
            string myVal = HiddenField.Value;
            //etc...
        }
    }

}

【讨论】:

  • 完美,我现在得到了正确的输出。谢谢。现在的问题是我将如何在代码隐藏文件中获取该值。创建一个新的 Javascript 函数来显示它对我没有多大帮助。谢谢。
  • 脚本会在代码执行完毕并渲染页面后运行。因此,如果要访问该值,则必须返回代码。添加一个按钮并在按钮单击事件中访问隐藏字段值:string myVal = HiddenField.Value;
  • 对不起,我对 ASP.NET 不是很熟悉。唯一的方法是强制回发到页面,以接收更新的值?我需要的是在母版页上的 Load 事件中获取的值,因为需要该值来添加对 WCF 服务的引用。谢谢。
  • 您想在值被输入隐藏字段之前访问它。代码中的 javascript 不会立即运行,但母版页中的代码会。所以它会得到空值。然后页面将呈现并运行 javascript,隐藏字段将获得一个值。您确定必须使用 javascript 更改 hiddenfield 值并将其用于 wcf 服务吗?
  • 感谢您的解释。我不需要使用 HiddenField,但我需要使用运行 ASP.NET 页面的 C# WebBrowser 中的公开函数以某种方式获取 WCF 服务的 url(通过调用 window.externa.myfunction() ; 在 Javascript 中)。如果您有任何其他建议,我将不胜感激。
【解决方案2】:

在隐藏字段标签中添加clientid static 这样 -

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

这样 ASP.Net 将不会用动态 ID 替换它,并且始终具有您提供的 ID,因此它现在将具有 ID HiddenField。那么你的第二次尝试应该会奏效。

更多可以在这里找到 -

http://msdn.microsoft.com/en-us/library/system.web.ui.control.clientidmode(v=vs.110).aspx

【讨论】:

  • 太好了,我可能更近了一步。我现在确实尝试过,但我无法更新 ClientID 或为其设置任何值(因为我猜它是静态的)。该值为“隐藏字段”。
猜你喜欢
  • 2012-11-07
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 2020-10-04
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多