【问题标题】:Using javascript to set value of hidden field then access value from serverside c# code使用 javascript 设置隐藏字段的值,然后从服务器端 c# 代码访问值
【发布时间】:2008-12-01 17:39:46
【问题描述】:

我正在使用样式为下拉的嵌套 html 无序列表。当单击内部列表列表项中的 a 标记时,它会触发一些 javascript,该 javascript 应该将隐藏字段的值设置为单击的链接的文本。

javascript 似乎可以工作 - 我使用警报从隐藏字段中读取值,但是当我尝试将该值放入我的 asp.net c# 代码后面的查询字符串中时 - 它提取了初始值 - 而不是javascript 设置值。

我猜这是因为 javascript 是客户端而不是服务器端,但有人知道我如何让它工作

HTML

    <div class="dropDown accomodation">
    <label for="accomodationList">Type of accomodation</label>
    <ul class="quicklinks" id="accomodationList">
        <li><a href="#" title="Quicklinks" id="accomodationSelectList">All types
     <!--[if IE 7]><!--></a><!--<![endif]-->

    <!--[if lte IE 6]><table><tr><td><![endif]-->
    <ul id="sub" onclick="dropDownSelected(event,'accomodation');">
            <li><a href="#" id="val=-1$#$All types" >All types</a></li>
            <li><a href="#" id="val=1$#$Villa" >Villa</a></li>
            <li><a href="#" id="val=2$#$Studio" >Studio</a></li>
            <li><a href="#" id="val=3$#$Apartment" >Apartment</a></li>
            <li><a class="last" href="#" id="val=4$#$Rustic Properties" >Rustic Properties</a></li>

    </ul>
    <!--[if lte IE 6]></td></tr></table></a><![endif]-->
        </li></ul>
    </div>

<input type="hidden" ID="accomodationAnswer" runat="server" />

javascript

    if(isChildOf(document.getElementById(parentList),document.getElementById(targ.id)) == true)
{           

            document.getElementById(parentLi).innerHTML = tname;            
            document.getElementById(hiddenFormFieldName).Value = targ.id;
            alert('selected id is ' + targ.id + ' value in hidden field is ' +           document.getElementById(hiddenFormFieldName).Value);
}

C# 代码

String qstr = "accom=" + getValFromLiId(accomodationAnswer.Value) + "&sleeps=" + getValFromLiId(sleepsAnswer.Value) + "&nights=" + getValFromLiId(nightsAnswer.Value) + "&region=" +
getValFromLiId(regionAnswer.Value) + "&price=" + Utilities.removeCurrencyFormatting(priceAnswer.Value);

【问题讨论】:

    标签: c# javascript


    【解决方案1】:

    我会这样做:首先,从隐藏字段(主体内部)中删除 runat='server' 属性:

    <input type="hidden" id="accomodationAnswer" />
    

    现在,在您要读取该值的服务器上,执行以下操作:

    string accomodationAnswer = Request.Form["accomodationAnswer"];
    
    // now use accomodationAnswer instead of accomodationAnswer.Value 
    // in the C# code that you indicated you are using
    

    应该可以的。

    【讨论】:

    • 这是最好的解决方案,因为 Viewstate 是导致值重新加载的关键项
    • 没有 runat='server' 的 Request.Form["accomodationAnswer"] 没有密钥 accomodationAnswer。我还缺少什么吗?
    【解决方案2】:

    试试这个

    如果您使用的是 .net 4.0,则在页眉中。

    Language="C#" AutoEventWireup="true" CodeFile="Page.cs" Inherits="Page"

    连同这篇文章:

    ClientIDMode="Static"
    

    它有助于在运行时不更改服务器端控件 ID

    现在

    将javascript中的值设置为

    document.getElementById("hiddenField").value = "Value";

    并在下面的代码隐藏中访问。

    字符串 hiddenValue=hiddenField.Value.ToString();

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-02-10
      • 2014-05-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-03-19
      • 2012-03-30
      • 2012-11-14
      相关资源
      最近更新 更多