2012-06-19 55 views
0

我正在开发自定义列表搜索工具。我有多个自定义属性来保留哪些列表搜索查询,以及要在搜索中查询哪些字段。自定义SharePoint WebPart - 自定义属性设置问题

实例UI

DROPDOWN(在列表中选择字段)TEXTBOX(查询)搜索按钮

我的问题是,加载Web部件时,将“字段搜索”属性被“列出之前设置搜索“属性,因为我有一个检查,导致和错误,以确保字段实际存在于正确的列表中,然后将它们添加到下拉列表中。

有什么方法可以指定Web部件属性在加载时设置哪个订单?

+0

如果您发布了一段代码示例,说明您的属性如何/在哪里设置,那将会很有帮助。 – CBono

+0

新增到stackoverflow - 发布在我的.cs文件中的两个属性。它们是文件中的前两个,问题是listToSearch在searchByOptions后面设置,它需要设置中的listToSearch属性,而不是默认的 – user1429393

+0

。将来,要知道你应该编辑你的问题来添加信息。你将它们发布为答案。 – CBono

回答

0

我认为在这种情况下,这将是最容易让你移动你的验证逻辑您的属性setter,进入另一种方法(CreateChildControls例如)。通过这样做,您将删除对属性设置顺序的任何依赖关系。

我的Web部件属性中通常没有逻辑(或非常非常少)。我从开始就在CreateChildControls之内完成所有的验证工作。然后,如果某个属性的值缺失或无效,我可以引发异常,或者更典型地使用Web部件的输出写出描述性消息。

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