2010-06-21 53 views
0

我想通過asp:TextBox過濾DFWP。Sharepoint過濾器TextBox中的DataFormWebPart

使用Office Designer我向頁面添加了帶有數據的DFWP。 添加了asp:帶有runat服務器,autopostback和ID =「textBoxSearch」的文本框。 在DFWP中創建變量[var]並在源代碼段中選擇了元素textBoxSearch。

然後添加過濾器「field_1 contains [var]」。

此搜索(過濾器)工作了兩週,然後過濾器損壞。只有重建DFWP的幫助。過了一個星期過濾器被打破。文本框中的任何文本都被過濾器忽略。

我發現SP無法在變量[var]中看到asp:textbox「textBoxSearch」,因爲如果將「包含[var]」更改爲「包含」某些文本「」,它就會起作用。

怎麼可能 - 工作一段時間,然後不小心沒有?

如果不使用內部過濾web部分,但文本框,如何解決它?

回答

0

我發現SP看起來屬性文本的asp:TextBox和非現有的屬性值。它將在IIS重置後更改。所以,當SP看起來值過濾器不起作用。

答案是兩個寫你自己的控件ascx基於asp:TextBox的CustomTextBox。

不要忘記,您不能將常用的代碼隱藏文件複製到SP。

首先,寫滿代碼隱藏文件,並將其編譯成DLL(我把它叫做SearchTextBox.dll):

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Configuration; 
using System.Data; 
using System.Web; 
using System.Web.Security; 
using System.Web.UI; 
using System.Web.UI.HtmlControls; 
using System.Web.UI.WebControls; 
using System.Web.UI.WebControls.WebParts; 
using System.Xml.Linq; 


namespace WebApplication3 
{ 
    public partial class NewTextBox : System.Web.UI.UserControl 
    { 
     protected global::System.Web.UI.WebControls.TextBox TextBox_PhoneSearch; 

     protected void Page_Load(object sender, EventArgs e) 
     { 

     } 
     public string Text 
     { 
      get { return TextBox_PhoneSearch.Text; } 
      set { TextBox_PhoneSearch.Text = value; } 
     } 
     public string Value 
     { 
      get 
      { 
       return TextBox_PhoneSearch.Text; 
      } 
     } 
    } 
} 

然後用鑰匙分配此DLL並插入到服務器的GAC(或給予特殊權利)。

之後,您可以將彙編與ascx控制文件中的公鑰關聯起來(無代碼隱藏文件)。 NewTextBox.ascx文件:

<%@ Assembly Name ="SearchTextBox, Version=1.0.0.0, Culture=neutral, PublicKeyToken=b341d7aadf237863"%> 
<%@ Control Language="C#" AutoEventWireup="true" Inherits="WebApplication3.NewTextBox" %> 
<asp:TextBox ID="TextBox_PhoneSearch" runat="server" AutoPostBack="true" class="ms-sbplain" style="width: 280px;"></asp:TextBox> 

複製NewTextBox.ascx到... \ 12 \ TEMPLATE \ CONTROLTEMPLATES \

控制NewTextBox.ascx就可以使用了。 我們只需要註冊它在SP頁:

<%@ Register Src="~/_controltemplates/NewTextBox.ascx" TagName="NewTextBox" TagPrefix="MyCompany" %> 

並把它插入到這個網頁:

<MyCompany:NewTextBox id="TextBoxSearch" runat="server"/>