我有级联下拉列表,通过jquery ajax填充。点击链接获取示例代码 Download Sample Code
导致异常的步骤:
1:选择ModelYear,Make和Model
2:点击“清除按钮”以重置下拉列表,并在它抛出异常时重置。
如何摆脱这个错误?我有一种奇怪的方法可以通过设置隐藏字段来清除它,但是我会在页面上有很多其他控件进行回发,而且我的解决方法变得笨拙而且我正在寻找一个真正的解决方案。
可能是我做错了什么但欢迎指点。
我对链接进行了一些访问更改。如果有效,请尝试告诉我。
编辑: 该示例使用VS2005 / .NET 2.0和WinXP开发,但服务器将是Win2003。
答案 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块可以吞下错误,这不是一个好主意。