概述
我有一个 ASCX 用户控件,我正尝试将其用于我的 Web 应用程序。
该控件具有多个属性,需要设置这些属性才能使控件正常工作。
该控件用于 GridView。控件的每个实例都需要来自它所在行的数据。
我试过的
我尝试使用属性和Eval
分配值的方法设置属性值。例如:
页面代码:
<cm:TestManagerEditor runat="server" id="TestManagerEditor" FilePath='<%# System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Some\\Path\\In\\The\\WebApp\\" + AccountYearPeriodOptionsGroupRandomTestManager.SelectedAccountValue + "\\" %>' />
我也尝试过设置RowDataBound
事件的值。例如:
页面代码:
private string PathToUserFiles = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Some\\Path\\In\\The\\WebApp\\";
protected void GridViewData_RowDataBound(object sender, GridViewRowEventArgs e)
{
// this is the customized path to files for the selected account.
string UserFilePath = PathToUserFiles + AccountYearPeriodOptionsGroupRandomTestManager.SelectedAccountValue + "\\";
// set modal dialog properties and add the scripting to open those dialogs.
if (e.Row.RowType == DataControlRowType.DataRow)
{
Controls_Modals_TestManagerEditor EditorModal = e.Row.FindControl("TestManagerEditor") as Controls_Modals_TestManagerEditor;
EditorModal.FilePath = UserFilePath;
}
}
问题
当我从控件所在的页面访问使用上述任一方法设置的属性时,值会正确返回。但是,如果我试图从控件的代码隐藏中访问属性的值,它会返回属性的默认值(通常是NULL
or string.Empty
)而不是设置的值。
例如,FilePath
上面使用的属性的声明与其他任何属性一样:
用户控制代码:
/// <summary>
/// The path to the location of the uploaded files.
/// </summary>
private string _FilePath = System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Some\\Path\\In\\The\\WebApp\\";
/// <summary>
/// Gets or sets the path to the location of uploaded files.
/// </summary>
public string FilePath
{
get
{
return _FilePath;
}
set
{
_FilePath = value;
}
}
但是当用户点击控件上的一个按钮执行一些操作FilePath
时,在UserControl的代码中访问时的值是
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Some\\Path\\In\\The\\WebApp\\"
而不是预期的
System.Web.Hosting.HostingEnvironment.ApplicationPhysicalPath + "Some\\Path\\In\\The\\WebApp\\" + AccountYearPeriodOptionsGroupRandomTestManager.SelectedAccountValue
AccountYearPeriodOptionsGroupRandomTestManager.SelectedAccountValue
(基本上从字符串中丢失)。
奇怪的是,这些属性实际上会执行set
操作。其中一个肯定会执行该操作,但随后会立即失去其价值。该ModalTitle
属性将正确设置 UX,但之后访问该属性的值无法返回屏幕上显示的内容。
例如,以下 set 访问器将正确设置TestManagerEditor_label
屏幕上的值,但无法设置 的值_ModalTitle
:
用户控制代码:
/// <summary>
/// The text to display in the title of the Modal Dialog Box.
/// </summary>
private string _ModalTitle = "Test Manager";
/// <summary>
/// Gets or sets the text to display in the title of the Modal Dialog Box.
/// </summary>
public string ModalTitle
{
get
{
return _ModalTitle;
}
set
{
_ModalTitle = value;
TestManagerEditor_label.InnerText = value + " ";
TestManagerEditor_label.InnerHtml = TestManagerEditor_label.InnerHtml + "<span class=\"fa fa-pencil\"></span>";
}
}
有谁知道这里发生了什么以及为什么我的控件无法访问或保存其父页面设置的属性值?