0

jquery ajaxを介して入力されたCascading Dropdownsがあります。リンクをクリックしてサンプル コードを取得する サンプル コードを ダウンロードする

例外になる手順:

1: ModelYear、Make、Model の選択を行います

2: [クリア] ボタンをクリックしてドロップダウンをリセットすると、例外がスローされます。

このエラーを取り除くにはどうすればよいですか? Clear クリック時に hiddenfield を設定することで回避する奇妙な方法がありますが、ポストバックを実行するページに他の多くのコントロールがあり、回避策が不器用になり、実際の解決策を探しています。

私は何か間違ったことをしているかもしれませんが、どんな指針も歓迎します。

リンクへのアクセスを一部変更しました。試してみて、うまくいくかどうか教えてください。

編集: サンプルは VS2005 / .NET 2.0 および WinXP を使用して開発されていますが、サーバーは Win2003 になります。

4

2 に答える 2

0

HiddenFieldの回避策を使用して、ポストバック時にドロップダウンを再ロードするかどうかを決定しました。ボタンをクリックすると、非表示フィールドの値を設定します。

編集: エラーを回避するために私が見つけたもう1つの方法は、DropDown Databindをtryブロック内に囲み、空のキャッチを設定することでした。

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

私のコードに関する限り、これによる副作用は見られませんでした。

注:エラーを飲み込む空のcatchブロックを常に用意することはお勧めできません。

于 2011-03-25T19:56:37.827 に答える
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.NETWebフォームを本当に嫌いでした。冗談だと思います。

于 2011-03-03T08:46:08.143 に答える