【问题标题】:asp:hyperlink not rendering correct HTML on serverasp:hyperlink 未在服务器上呈现正确的 HTML
【发布时间】:2013-02-15 21:37:24
【问题描述】:

我正在处理 .NET 2.0 上的 ASP.NET WebForms 中的一个项目,并且遇到了一个我似乎找不到原因的问题。我的 aspx 文件中有以下代码:

 <table>
            <tr>
                <td>

                    <asp:HyperLink ID="supportLink" runat="server">Customer Support Docket</asp:HyperLink>
                </td>
            </tr>

            <tr>
                <td>
                    <asp:HyperLink ID="entitlementsLink" runat="server">Edit Entitlements</asp:HyperLink>
                </td>
            </tr>
        </table>

当我在本地以调试模式运行时,效果很好。链接出现并且 HTML 被正确呈现:

本地呈现的 HTML

<table>
    <tr>
        <td>

            <a id="ctl00_ContentMain_supportLink" href="ViewCustomer.aspx?customerid=659">Customer Support Docket</a>
        </td>
    </tr>

    <tr>
        <td>
            <a id="ctl00_ContentMain_entitlementsLink" href="EditEntitlements.aspx?customerid=659">Edit Entitlements</a>
        </td>
    </tr>
</table>

但是,当我在生产环境中的服务器上运行它时,会生成以下 HTML:

服务器渲染的 HTML

 <table>
        <tr>
            <td>

                <a id="ctl00_ContentMain_supportLink">Customer Support Docket</a>
            </td>
        </tr>

        <tr>
            <td>
                <a id="ctl00_ContentMain_entitlementsLink">Edit Entitlements</a>
            </td>
        </tr>
    </table>

如您所见,两者都缺少 href。在我后面的代码中,我添加了 URL,因为我很难让它们在 aspx 文件中正确呈现:

文件背后的代码

 protected void Page_Load(object sender, EventArgs e)
    {
        supportLink.NavigateUrl = string.Format("ViewCustomer.aspx?customerid={0}",
                                                Request.QueryString["customerid"]);
        entitlementsLink.NavigateUrl = string.Format("EditEntitlements.aspx?customerid={0}",
                                                     Request.QueryString["customerid"]);
    }

在这一点上,我不确定我能做什么。我的计划是在接下来的几周内用 MVC4 重写这个站点,但由于这是一个内部站点并且不会产生资金,所以它在我的优先级列表中的位置很低,并且暂时不会得到更多关注,这意味着我需要来解决这个问题。

服务器环境是 Windows Server 2003 上的 IIS 6,HTML 在 IE9 和 Chrome 24.0.1312.57 中都以这种方式呈现。我已清除两个浏览器中的缓存,但无济于事,并且我知道页面在发布后会得到更新,因为我添加的具有相同更改的其他功能实际上正在生产中工作。

编辑

Rezalas 想知道我从哪里得到客户 ID。它来自查询字符串。为了显示一个空白的查询字符串不会导致这种情况,这里是没有查询字符串的本地和生产 HTML:

没有查询字符串的本地渲染

<table>
    <tr>
        <td>

            <a id="ctl00_ContentMain_supportLink" href="ViewCustomer.aspx?customerid=">Customer Support Docket</a>
        </td>
    </tr>

    <tr>
        <td>
            <a id="ctl00_ContentMain_entitlementsLink" href="EditEntitlements.aspx?customerid=">Edit Entitlements</a>
        </td>
    </tr>
</table>

没有查询字符串的生产 HTML

<table>
    <tr>
        <td>

            <a id="ctl00_ContentMain_supportLink">Customer Support Docket</a>
        </td>
    </tr>

    <tr>
        <td>
            <a id="ctl00_ContentMain_entitlementsLink">Edit Entitlements</a>
        </td>
    </tr>
</table>

【问题讨论】:

  • 只是确保...您确定您正确部署了重建的 .dll?
  • @RandomWebGuy 我直接从 Visual Studio 2008 发布。由于同一个文件中的更改很明显(新的 javascript 函数和新行为都在其中),因此 dll 被推到那里。
  • 服务器端更改?标记更改?两者都有?

标签: c# webforms


【解决方案1】:

为了澄清,customerid 价值来自哪里?您确定在服务器上运行时的值被正确提取了吗?我这样说是因为它看起来好像没有提供 ID,因此没有构建字符串,并且导航 url 被排除在外,因为它没有值。

【讨论】:

  • customerid 来自我后面的代码中看到的查询字符串。我可以将带有查询字符串的页面 url 从本地主机(它工作的地方)复制到产品站点,但它仍然不起作用。查询字符串肯定在我的测试中。
  • 查询字符串是否包含值无关紧要。例如 supportLink 的导航 URL 就是 ViewCustomer.aspx?customerid=
  • 如果您将代码更改为以下内容,它是否有效(我的意思是在服务器上)? supportLink.NavigateUrl = "./sometest.htm";
  • @Rezalas 好的,这很奇怪。我将 supportLink 更改为静态 url,然后发布并显示。然后我将它改回来并发布,它开始正常工作。不知道为什么。它一定没有发布背后的代码。
  • @RandomWebGuy 我猜。这很奇怪,因为后面的代码中有其他代码是新的并且可以工作但没有。感谢您的帮助。
猜你喜欢
  • 2013-12-04
  • 1970-01-01
  • 2019-08-29
  • 2016-04-03
  • 2012-03-05
  • 2011-09-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多