ASP.NET DropDownValue不会在webfarm中的一个服务器上保留

时间:2009-07-27 21:48:00

标签: c# .net asp.net viewstate

我遇到一个问题,即DropDownList在网络服务器场上的一个服务器上的SelectedValue之后丢失了PostBack。在其他服务器上,一切正常。

所有服务器都使用相同版本的代码,并且应用了相同的Service Pack和所有更新。当我在本地计算机上运行时(但指向生产数据库),代码也能正常工作。

我认为ViewState可能是问题所在,但我确认所有计算机上的web.config,aspx页面和代码都是相同的。

尝试Input string was not in a correct format.时收到了Convert.ToInt32()错误。

我添加了Trace.Write,以确定此特定服务器上的DropDownList值为null

代码段

protected void Page_Load(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
    {
        LoadClientDropDown();
    }
}

protected void LoadClientDropDown()
{
    //load the drop down ddlClients from data
}

protected void btnSave_Click(object sender, System.EventArgs e)
{
    int clientValue = Convert.ToInt32(ddlClients.SelectedValue);
}

我能错过什么?

4 个答案:

答案 0 :(得分:1)

应用程序是否已配置为在Web场上运行?看看这篇MSDN文章:

http://msdn.microsoft.com/en-us/library/ms998288.aspx#paght000007_viewstate

您需要确保machineKey在您的应用运行的每台服务器上保持一致。您可以在web.config中定义它。我记得以前没有这样做过的雇主遇到了查看状态问题。

答案 1 :(得分:1)

除了上面提到的机器密钥,您的Web场如何平衡负载?

我之前遇到的问题是从一台服务器接收信息并将其发回给另一台服务器。

答案 2 :(得分:0)

看起来你只是在没有回发的情况下填充控件,所以这里发生的是在帖子上你得到你的控件没有项目并且显然没有价值

我会在你实际创建该控件的时候用这些项加载它。

答案 3 :(得分:0)

缺少进一步的信息我怀疑ViewState。如果从下拉控件提交的值不在其项目列表中的值(从ViewState填充),那么它将该值设置为null。

在表单提交上查看“Request.Form [ddlClients.UniqueID]”,看看它是否有值。如果它有一个值,则.NET拒绝回发的值。在这种情况下,可能的情况是视图状态数据没有被保留,或者某些代码在它的Init之后但在事件处理之前修改了下拉列表的内容。

希望其中一条建议可以帮助您找到解决问题的方法。