【问题标题】:UrlProperty and relative URLsUrlProperty 和相对 URL
【发布时间】:2013-08-27 04:42:20
【问题描述】:

我有一个具有此属性的自定义 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”

我是否遗漏了一些明显的东西来完成这项工作?

【问题讨论】:

    标签: asp.net url-rewriting user-controls hyperlink


    【解决方案1】:

    查看超链接上的属性,尤其是[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))]
    

    【讨论】:

    • WebCategory 和 WebSysDescription 是 System.Web 内部的。我的第一个想法也是反射 System.Web.UI.WebControls.HyperLink.NavigateUrl。我可以这样设置它,但它的行为仍然相同,不〜。 [DefaultValue(""), UrlProperty, Bindable(true), Editor("System.Web.UI.Design.UrlEditor, System.Design, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a", typeof (UITypeEditor))]
    • 嗯。我确信 Editor 属性会为您解决问题。顺便说一句,您可以将WebSysDescription 换成DescriptionWebCategory 换成Category,但这些属性并不是问题的根源或解决方案。
    • 是的,这很奇怪。如果我直接从智能感知下拉列表中选择该项目,则没有波浪号。如果我向下滚动到“Pick Url ...”并使用该对话框,它可以正常工作。现在我只是删除 UrlProperty 属性,因为我认为如果你必须手动输入 ~ ,而不是你获得智能感知,选择一个文件,它没有得到纠正。跨度>
    【解决方案2】:

    控件在哪里无关紧要,url是相对于控件所在页面的。
    因此,如果控件放置在页面“foo.aspx”并且它引用页面“foo2.aspx”(即与“foo.aspx”在同一目录中),那么控件的 url 中只需包含“foo2.aspx”属性将起作用。

    【讨论】:

    • 这道题3岁了;我已经记不起上下文了。我的猜测是我通过在生命周期事件中使用 Page.ResolveUrl 解决了这个问题。由于某种原因,这些 URL 必须是相对于控件生成的,而不是它们所在的页面。
    猜你喜欢
    • 1970-01-01
    • 2011-06-02
    • 2013-03-19
    • 1970-01-01
    • 1970-01-01
    • 2013-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多