我可以在自定义控件中获取Visual Studio.NET中当前打开的ASP页面文件名吗?

时间:2010-03-02 21:00:27

标签: asp.net visual-studio

我在Visual Studio中有一个自定义控件,我需要以某种方式在设计模式下访问Visual Studio中当前打开的页面。如果我查看自定义控件的Page属性,ID只会显示“__Page”,并且大多数属性都是不可访问的,这不是很有用。有没有人知道一个服务或接口有一些方法来获取项目中当前打开的页面的文件名?感谢。

3 个答案:

答案 0 :(得分:1)

可以做到。见这里:http://weblogs.asp.net/gunnarpeipman/archive/2008/05/21/using-parent-page-properties-in-user-control.aspx

但即使这个页面也是以

开头
  

这种情况是一个警示标志 -   用户界面有问题   结构如果用户控件应该知道   他们的父母。

如果您需要了解有关该页面的信息,那么更好的方法是在您的控件上创建一个可以从页面设置的属性。然后从控件中,您可以检查属性的值。

例如,如果您真的需要知道页面名称,那么您的控件应该有一个名为“PageName”的属性,然后当您将其添加到页面时,您可以显式设置该属性。 (如果你愿意,我会带回一个例子。)

以下是我遇到的一个示例 - 报告页面的日期时间选择器控件。它有一个名为FromDate的属性,它绑定到一个文本框。

public  DateTime FromDate
{
    get
    {
        return Convert.ToDateTime(txtFrom.Text);
    }
    set
    {
        txtFrom.Text = value.ToString();
    }
}

然后你会在页面中设置它:

<uc1:DateRangeControl ID="DateRangeControl1" runat="server" 
                FromDate="1/1/2009"    />

我们之所以说这是一个设计缺陷的原因是,优秀的OO设计会说天生的控制应该能够在不知道它是什么容器的情况下进行操作。

答案 1 :(得分:0)

为什么在设计时需要这些信息?如果您在设计模式下正确显示它时遇到问题,您是否可以检查DesignMode属性并仅在运行时执行与页面相关的逻辑?

答案 2 :(得分:0)

我同意如果你需要这样做,那么UI设计可能有问题。但是,我发现它偶尔会有用。

假设您的自定义控件扩展了WebControl或其中一个子类,并且位于Page:

string myPageName = System.IO.Path.GetFileName(this.Page.Request.Path);

这很容易。