CascadingDropDown错误 - DropDownList的selectedValue无效

时间:2011-03-02 01:10:58

标签: asp.net jquery cascadingdropdown

我有级联下拉列表,通过jquery ajax填充。点击链接获取示例代码 Download Sample Code

导致异常的步骤:

1:选择ModelYear,Make和Model

2:点击“清除按钮”以重置下拉列表,并在它抛出异常时重置。

如何摆脱这个错误?我有一种奇怪的方法可以通过设置隐藏字段来清除它,但是我会在页面上有很多其他控件进行回发,而且我的解决方法变得笨拙而且我正在寻找一个真正的解决方案。

可能是我做错了什么但欢迎指点。

我对链接进行了一些访问更改。如果有效,请尝试告诉我。

编辑: 该示例使用VS2005 / .NET 2.0和WinXP开发,但服务器将是Win2003。

2 个答案:

答案 0 :(得分:0)

我已经检查了你的代码,我认为快速简单的解决方法是检查请求是否来自清除按钮。基本上,如果您按下清除按钮,我不会调用ReloadDropDownSelection()。

public partial class CascadingUC : System.Web.UI.UserControl
{
    protected void Page_Load(object sender, EventArgs e)
    {
        if (!Page.IsPostBack)
        {
            ModelYears.Attributes.Add("onchange", "OnModelYearChange()");
            Makes.Attributes.Add("onchange", "OnMakeChange()");
            Models.Attributes.Add("onchange", "OnModelChange()");
            LoadMakes();
            LoadModels();
        }
        else
        {
            if ((Request.Form["btnClear"]==null)||(Request.Form["btnClear"] != "Clear"))
                ReloadDropDownSelection();
        }
    }

正如我在评论中告诉你的那样,我认为这里的问题是观点。您加载您的组合服务器端(PopulateDropDownList),然后更改客户端项目。

我花了几年时间努力解决这些问题(asp.net,viewstate,成千上万的事件),当ASP.NET MVC出来时我已经看到了光;-) 我真的很讨厌ASP.NET webforms。我觉得这几乎是个玩笑。

答案 1 :(得分:0)

我使用了HiddenField的解决方法来决定是否应该在回发时重新加载下拉列表。点击按钮后,我设置隐藏字段值。

<强>编辑: 我发现绕过错误的另一种方法是将我的DropDown Databind包含在try块中并且有一个空的catch。

try
{
    ddl.DataSource = list;
    ddl.DataTextField = "Text";
    ddl.DataValueField = "Value";
    ddl.DataBind();
}
catch{}

就我的代码而言,我没有看到任何副作用。

注意:一直有一个空的catch块可以吞下错误,这不是一个好主意。