Asp.net UrlProperty和相对URL
我有一个自定义UserControl,它使用此属性继承System.Web.UI.UserControl,该属性应设置为要链接到的网站上的URL:Asp.net UrlProperty和相对URL,asp.net,url-rewriting,user-controls,hyperlink,Asp.net,Url Rewriting,User Controls,Hyperlink,我有一个自定义UserControl,它使用此属性继承System.Web.UI.UserControl,该属性应设置为要链接到的网站上的URL: [DefaultValue("~/NewsItem.aspx"), UrlProperty("*.aspx")] public string InternalItemViewUrl { get { return _internalItemViewUrl; } set { _internalItemViewUrl = value; }
[DefaultValue("~/NewsItem.aspx"), UrlProperty("*.aspx")]
public string InternalItemViewUrl
{
get { return _internalItemViewUrl; }
set { _internalItemViewUrl = value; }
}
该控件将正确显示URL选取器下拉列表,但如果您从列表中选择URL,它不会像HyperLink那样将其更改为站点相对的~/foo.aspx链接,而是只获取不起作用的foo.aspx控件位于/controls中,而页面显然不在其中。如果你一直向下滚动并使用Pick URL。。。这将打开完整的弹出窗口,在该对话框中选择的页面将转换为~/foo.aspx
我是不是遗漏了一些显而易见的东西来完成这项工作?查看超链接上的属性,尤其是[Editor]属性
[DefaultValue(""),
WebSysDescription("HyperLink_NavigateUrl"),
UrlProperty, Bindable(true), WebCategory("Navigation"),
Editor("System.Web.UI.Design.UrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof(UITypeEditor))]
不管控件在哪里,url都是相对于控件所在页面的。
因此,如果控件放在foo.aspx页上,并且它引用了与foo.aspx位于同一目录中的foo2.aspx页,那么只需将foo2.aspx放在控件的url属性中就可以了。WebCategory和WebSysDescription是System.Web的内部属性。我的第一个想法是也使用reflector System.Web.UI.WebControls.HyperLink.NavigateUrl。我可以这样设置它,但它的行为仍然是一样的,不~。[DefaultValue,UrlProperty,Bindabletrue,EditorSystem.Web.UI.Design.UrlEditor,System.Design,Version=2.0.0.0,Culture=neutral,PublicKeyToken=b03f5f7f11d50a3a,typeofUITypeEditor]嗯。我想编辑器属性肯定会帮你解决问题。顺便说一句,你可以用WebSysDescription替换Description,用WebCategory替换Category,但这些属性不是问题的根源或解决方案。是的,这很奇怪。如果我直接从intellisense下拉列表中选择该项,则没有波浪线。如果我向下滚动选择Url。。。使用该对话框,它可以正常工作。现在,我只是删除UrlProperty属性,因为我认为如果必须手动输入,则比获取intellisense时更可能键入~选择一个文件,但不会得到更正;我再也记不起上下文了。我猜我通过在生命周期事件中使用Page.ResolveUrl解决了这个问题。由于某种原因,URL必须是相对于控件生成的,而不是它们所在的页面。