Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Asp.net 我可以在自定义控件中获取Visual Studio.NET中当前打开的ASP页面文件名吗?_Asp.net_Visual Studio - Fatal编程技术网

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

Asp.net 我可以在自定义控件中获取Visual Studio.NET中当前打开的ASP页面文件名吗?,asp.net,visual-studio,Asp.net,Visual Studio,我在VisualStudio中有一个自定义控件,我需要以某种方式在设计模式下访问VisualStudio中当前打开的页面。如果我查看自定义控件的Page属性,ID只会显示“\uuuPage”,并且大多数属性都是不可访问的,这没有多大帮助。是否有人知道某个服务或接口具有某种获取项目中当前打开页面的文件名的方法?谢谢。这是可以做到的。请看这里: 但即使是这一页的开头也是这样的 这是一个警告信号- UI有点问题 如果用户控件应该知道 他们的父母 如果您需要了解有关页面的信息,那么更好的方法是在控件上创

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

这是可以做到的。请看这里:

但即使是这一页的开头也是这样的

这是一个警告信号- UI有点问题 如果用户控件应该知道 他们的父母

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

例如,如果您确实需要知道页面名称,那么您的控件应该有一个名为“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设计会说一个控件本质上应该能够在不知道它在什么容器中的情况下运行

这是可以做到的。请看这里:

但即使是这一页的开头也是这样的

这是一个警告信号- UI有点问题 如果用户控件应该知道 他们的父母

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

例如,如果您确实需要知道页面名称,那么您的控件应该有一个名为“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设计会说一个控件本质上应该能够在不知道它在什么容器中的情况下运行

为什么在设计时需要这些信息?如果在设计模式下无法正确显示,是否可以改为检查属性并仅在运行时执行页相关逻辑?

为什么在设计时需要此信息?如果在设计模式下无法正确显示,是否可以改为检查属性并仅在运行时执行页面相关逻辑?

我同意,如果需要这样做,那么UI设计可能有问题。然而,我发现它有时很有用

假设您的自定义控件扩展了WebControl或其子类之一,并且位于页面内:

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

就这么简单。

我同意,如果您需要这样做,那么UI设计可能有问题。然而,我发现它有时很有用

假设您的自定义控件扩展了WebControl或其子类之一,并且位于页面内:

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

很简单。

为什么控件需要知道有关页面的任何信息?为什么控件需要知道有关页面的任何信息?谢谢David+1。我当然同意你的看法,但这不是我想要的。我使用这些自定义服务器控件所做的工作的最终结果不会导致对容器或类似的任何依赖。我正在寻找由运行时上下文生成的几个属性的等价物,这些属性显示包含当前页面对象的文件名。例如,作为TemplateControl的页面的AppRelativeVirtualPath属性。它也可以通过反射在页面请求和其他一些地方找到,但是这些属性在设计期间都是空的。谢谢David+1。我当然同意你的看法,但这不是我想要的。我使用这些自定义服务器控件所做的工作的最终结果不会导致对容器或类似的任何依赖。我正在寻找由运行时上下文生成的几个属性的等价物,这些属性显示包含当前页面对象的文件名。例如,作为TemplateControl的页面的AppRelativeVirtualPath属性。它也可以通过反射在页面请求和其他一些地方找到,但是这些属性在设计时都是空的。不,我在运行时不需要页面文件名信息。为了方便开发人员,我想在服务器控件的一些自定义编辑器中使用页面文件名信息。它不会为控件创建任何依赖项。不,我在运行时不需要页面文件名信息。为了方便开发人员,我想在服务器控件的一些自定义编辑器中使用页面文件名信息。它不会为控件创建任何依赖项。