我正在开发一个自定义列表搜索工具。我有多个自定义属性来保留搜索查询的列表,以及要在搜索中查询的字段。
示例用户界面
DROPDOWN(列表中的选定字段) TEXTBOX(查询) SEARCHBUTTON
我的问题是,在加载 WebPart 时,在“要搜索的列表”属性之前设置了“要搜索的字段”属性,这会导致错误,因为我在添加之前检查以确保字段确实存在于正确的列表中他们到下拉菜单。
有没有办法指定 Web 部件属性在加载时设置的顺序?
我正在开发一个自定义列表搜索工具。我有多个自定义属性来保留搜索查询的列表,以及要在搜索中查询的字段。
示例用户界面
DROPDOWN(列表中的选定字段) TEXTBOX(查询) SEARCHBUTTON
我的问题是,在加载 WebPart 时,在“要搜索的列表”属性之前设置了“要搜索的字段”属性,这会导致错误,因为我在添加之前检查以确保字段确实存在于正确的列表中他们到下拉菜单。
有没有办法指定 Web 部件属性在加载时设置的顺序?
[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");
}
}
}
[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
}
}
我认为在这种情况下,您最容易将验证逻辑从属性设置器中移到另一个方法中(CreateChildControls
例如)。通过这样做,您将删除对属性设置顺序的任何依赖。
我的 Web 部件属性中通常没有逻辑(或非常非常少)。我从CreateChildControls
一开始就进行所有验证。然后,如果某些属性的值缺失或无效,我可以抛出异常,或者更典型的是,使用 Web 部件的输出写出描述性消息。