Sharepoint 2010 自定义SharePoint Web部件-自定义属性设置问题

Sharepoint 2010 自定义SharePoint Web部件-自定义属性设置问题,sharepoint-2010,web-parts,page-lifecycle,Sharepoint 2010,Web Parts,Page Lifecycle,我正在开发一个自定义列表搜索工具。我有多个自定义属性来保留搜索查询的列表以及搜索中要查询的字段 示例用户界面 下拉列表(列表中的选定字段)文本框(查询)搜索按钮 我的问题是,在加载Web部件时,“要搜索的字段”属性设置在“要搜索的列表”属性之前,这会导致错误,因为在将字段添加到下拉列表之前,我要进行检查以确保字段实际存在于正确的列表中 有没有办法指定web部件属性在加载时设置的顺序?我认为在这种情况下,将验证逻辑从属性设置器中移出,并转移到另一个方法中(例如,CreateChildControl

我正在开发一个自定义列表搜索工具。我有多个自定义属性来保留搜索查询的列表以及搜索中要查询的字段

示例用户界面

下拉列表(列表中的选定字段)文本框(查询)搜索按钮

我的问题是,在加载Web部件时,“要搜索的字段”属性设置在“要搜索的列表”属性之前,这会导致错误,因为在将字段添加到下拉列表之前,我要进行检查以确保字段实际存在于正确的列表中


有没有办法指定web部件属性在加载时设置的顺序?

我认为在这种情况下,将验证逻辑从属性设置器中移出,并转移到另一个方法中(例如,
CreateChildControls
)。这样,您将删除对属性设置顺序的任何依赖关系

    [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");
            }
        }
    }

我的Web部件属性中通常没有逻辑(或者非常、非常少)。我从一开始就在
CreateChildControls
中进行所有验证。然后,如果某个属性的值丢失或无效,我可以抛出一个异常,或者更典型地,使用Web部件的输出写出一条描述性消息。

如果您发布了一个代码示例,演示如何/在何处设置属性,这会很有帮助。stackoverflow新手-发布了我的.cs文件中的两个属性。它们是文件中的前两个,问题是listToSearch是在searchByOptions之后设置的,它需要设置中的listToSearch属性,而不是默认设置。今后,要知道你应该编辑你的问题以添加信息。您将它们作为答案发布。
[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
        }
    }