0

カスタム リスト検索ツールを開発しています。検索クエリのリストと、検索でクエリするフィールドを保持するカスタム プロパティが複数あります。

サンプル UI

DROPDOWN(リストで選択されたフィールド) TEXTBOX(クエリ) SEARCHBUTTON

私の問題は、WebPart をロードするときに、「検索するフィールド」プロパティが「検索するリスト」プロパティの前に設定されていることです。追加する前に、フィールドが実際に正しいリストに存在することを確認するためのチェックがあるため、エラーが発生します。それらをドロップダウンに。

読み込み時に Web パーツのプロパティを設定する順序を指定する方法はありますか?

4

3 に答える 3

0
[Category("Search Settings"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true), WebDisplayName("Search Field Options (Separate by comma ',')"),
WebDescription("Enter Fields to Search By")]
    public string SearchByOptions {
        get {
            return searchByOptions;
        }
        set {//between here
            //  int validFlag = 1;
            //  foreach (string str in SeparateByComma(value)) {
            //    if (!FieldExists(str, CustomTextProp)) {
            //      validFlag = 0;
            //      break;
            //    }
            //  }
            //  if (validFlag == 1) {
            searchByOptions = value;
            //  } else {
            //    throw new WebPartPages.WebPartPageUserException("Option is null or one or more fields do not exist/have been entered incorrectly");
            //  }//and here
        }
    }
于 2012-06-20T16:44:41.140 に答える
0
    [Category("Search Settings"),
Personalizable(PersonalizationScope.Shared),
WebBrowsable(true), WebDisplayName("List Name"),
WebDescription("Enter list name")]
    public string CustomTextProp {
        get { return listToSearch; }
        set {
            int existsFlag = 0;
            foreach (SPList spl in thisWeb.Lists) {
                if (spl.Title == value || value == string.Empty) {
                    existsFlag = 1;
                    break;
                }
            }
            if (existsFlag == 1) {
                listToSearch = value;
            } else {
                throw new WebPartPages.WebPartPageUserException("The list entered does not exist - Enter an existing list or create a new one");
            }
        }
    }
于 2012-06-20T16:41:33.700 に答える
0

CreateChildControlsこの場合、検証ロジックをプロパティ セッターから別のメソッド (たとえば)に移動するのが最も簡単だと思います。そうすることで、プロパティ設定順序への依存関係をすべて削除できます。

通常、Web パーツのプロパティにはロジックがありません (またはほとんどありません)。私はすべての検証をCreateChildControls最初から/から行います。次に、一部のプロパティに値がないか無効な値がある場合は、例外をスローするか、より一般的には、Web パーツの出力を使用して説明的なメッセージを書き出すことができます。

于 2012-06-22T02:38:09.927 に答える