0

asp:TextBox を使用して DFWP をフィルター処理したいと考えています。

Office Designer を使用して、データを含む DFWP をページに追加しました。runat サーバー、autopostback、および ID="textBoxSearch" を使用して asp:textbox を追加しました。DFWP で変数 [var] を作成し、ソース セクションで要素 textBoxSearch を選択しました。

次に、フィルター「field_1 contains [var]」を追加しました。

この検索 (フィルター) は 2 週間うまく機能し、その後フィルターが壊れました。DFWP を再作成することだけが役に立ちました。もう一週間後、フィルターが壊れました。テキストボックス内のテキストはフィルターによって無視されました。

SP は asp:textbox "textBoxSearch" を変数 [var] に表示できないことがわかりました。これは、「contains [var]」を「contains 'some text'」に変更すると機能するためです。

どうして - しばらく働いていたのに、偶然に働かなかったのですか?

内部フィルター Web パーツではなくテキストボックスを使用している場合、修正方法は?

4

1 に答える 1

0

SPがasp:TextBoxのプロパティTextと存在しないプロパティValueを参照していることがわかりました。IISのリセット後に変更されます。したがって、SPが値を参照する場合、フィルターは機能しません。

答えは、asp:TextBoxに基づいて独自のコントロールascxCustomTextBoxを作成することです。

通常のコードビハインドファイルを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"/>
于 2010-06-23T07:40:33.980 に答える