【问题标题】:How to change the value of input hidden on server-side如何更改隐藏在服务器端的输入值
【发布时间】:2013-02-13 14:01:55
【问题描述】:

我有一个带有隐藏字段的表单:

<form id="Form1" runat="server" style="width: 100%; height: 100%; overflow: hidden"       onsubmit="return false;">
<div>    
<input type="hidden" runat="server" id="TrackColors" value=""/>            
<input type="hidden" runat="server" id="Relogin" value=""/>
</div>
</form>

在服务端调用Page_Load()函数后:

protected void SomeFunction()
    {
        Dictionary<int, int> trackColors = new Dictionary<int, int>();
        if (!String.IsNullOrEmpty(TrackColors.Value))
            trackColors = ReadValues(TrackColors.Value);

    //if value is null or empty it's assigned to a different


        TrackColors.Attributes["value"] = FormValues(trackColors); //FormValues() return string

    //change is visible        
    }


    string FormValues(Dictionary<int, int> values)
    {
    string result = "";
    if (values == null || values.Count == 0)
        return result;

    foreach (KeyValuePair<int, int> p in values)
        result += p.Key + "@@" + p.Value + "^^";
    result = result.TrimEnd('^');

    return result;
}

如果我改变 ComboBox 的选中字段,则调用该函数:

<dx:ASPxTextBox ID="ColorTrackCarID" Visible="false" Text='<%# Eval("CarId") %>' />
                    <dx:ASPxComboBox ID="ASPxComboBox1" runat="server" SelectedIndex='<%# Eval("TrackColor") %>' 
                                    ValueType="System.String" Width="30" ShowImageInEditBox="true" 
                        ondatabinding="ASPxComboBox1_DataBinding">
                                    <ClientSideEvents SelectedIndexChanged="function (s,e) { 
                                   if (window.TrackColorChanged != null)TrackColorChanged(s,e); }" />
</dx:ASPxComboBox>



function TrackColorChanged(s, e) {
            var TrackColors = document.getElementById('TrackColors');
            if (TrackColors == null || TrackColors.value == "")
                return values;      
            //values is always emply    
        }

我了解表单字段的值不会传回客户端。问题是:如何将这些值传回来?

如果我在Page_Load()中改变服务器端的值,那么客户端就可以看到一切,也就是

protected void Page_Load(object sender, EventArgs e)
{
TrackColors.Attributes["value"] = "bla-bla-bla";
//All changes are visible on the client-side
}

感谢您的关注。

【问题讨论】:

  • 你试过只使用TrackColors.Value吗?此外,FormValues(trackColors); 会返回什么? 发布该方法。
  • 您可以通过发送该值从您的代码隐藏中调用 JS/JQuery 函数

标签: asp.net hiddenfield


【解决方案1】:

为了更简单,用控件替换隐藏字段:

<asp:HiddenField id="X" runat="server" />

你可以直接在上面设置值:

X.Value = "XYZ";

这个值可以从客户端传递到服务器,反之亦然,并且非常容易工作。并不是说您不能使用服务器端输入,而是 HiddenField 为您处理了很多。

编辑:另外,你确定你没有覆盖这个值吗?如果你这样做:

protected void Page_Load(object sender, EventArgs e)
{
TrackColors.Attributes["value"] = "bla-bla-bla";
//All changes are visible on the client-side
}

这将始终将值更改为“bla-bla-bla”。如果您在页面加载时对其进行初始化,您可能希望将其包装在 if (!Page.IsPostback) 中。

【讨论】:

  • 已在上面编辑。请注意,我从来没有让这种方法失败过;使用服务器端隐藏字段总是将值发回。会不会是代码中其他地方的问题?
猜你喜欢
  • 2011-06-10
  • 2020-03-10
  • 1970-01-01
  • 2014-08-27
  • 2018-03-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多