Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/29.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 UrlProperty和相对URL_Asp.net_Url Rewriting_User Controls_Hyperlink - Fatal编程技术网

Asp.net UrlProperty和相对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; }

我有一个自定义UserControl,它使用此属性继承System.Web.UI.UserControl,该属性应设置为要链接到的网站上的URL:

 [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必须是相对于控件生成的,而不是它们所在的页面。