我发现 SP 会查看 asp:TextBox 的属性 Text 和不存在的属性 Value。IIS 重置后将更改。因此,当 SP 查找值过滤器时,它不起作用。
答案是两个基于asp:TextBox编写自己的控件ascx 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 控制文件中的公钥链接(没有代码隐藏文件)。新文本框.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"/>