Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/74.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
正在添加runat=";服务器";在ASP.net中使用HTML标记获取相对路径是一个优雅的解决方案吗?_Asp.net_Html - Fatal编程技术网

正在添加runat=";服务器";在ASP.net中使用HTML标记获取相对路径是一个优雅的解决方案吗?

正在添加runat=";服务器";在ASP.net中使用HTML标记获取相对路径是一个优雅的解决方案吗?,asp.net,html,Asp.net,Html,我在新网站的不同位置使用了两个ASP.Net用户控件。这些用户控件具有如下链接: <a href="daily/panchang/"></a> 如果usercontrol用于各个子目录中的页面,那么相对路径就不起作用,我不想在路径中提供我的完整网站名称。所以我做了这个 <a href="~/daily/panchang/" runat="server"> 现在ASP.Net“~”标记可以正确地解析根路径 在需要使用runat=“server”解析根

我在新网站的不同位置使用了两个ASP.Net用户控件。这些用户控件具有如下链接:

<a href="daily/panchang/"></a>

如果usercontrol用于各个子目录中的页面,那么相对路径就不起作用,我不想在路径中提供我的完整网站名称。所以我做了这个

<a href="~/daily/panchang/" runat="server">

现在ASP.Net“~”标记可以正确地解析根路径

在需要使用runat=“server”解析根路径的地方标记所有HTML标记可以吗?或者您知道更好的HTML方法吗


谢谢

但是要小心,因为每次回发发生时,每个运行了
的元素都会被“序列化”并存储在中,您不想用无用的数据把它弄得乱七八糟。

您应该使用一个基标记来定义应用程序的根,并使所有链接都像这样相对:

<head>
    <base href="<%= Request.ApplicationPath %>" />
</head>
...
<a href="daily/panchang/"></a> <!-- this now points to ~/daily/panchang/ -->

...

我不会说这是否是一个优雅的解决方案,我只会指出系统内的一个替代方案。Web:

<a href="<%= VirtualPathUtility.ToAbsolute("~/daily/panchang/") %>">


它看起来与我写的东西没有什么不同,而且看起来更难阅读。效率更高吗?其实很不一样。带有runat server的控件将创建一个HtmlGenericControl并将其添加到控件层次结构中。这将使用计算字符串创建一个LiteralControl。我不会担心效率。这可能更有效,但可能无关紧要。我同意克里斯蒂安的观点——这比你自己的初始解决方案要好得多——你还可以避免整个视图状态问题。我在初始解决方案中添加了EnableViewState=“False”,得到了所需的结果。我认为读书也更干净。你说什么?:)每件事都有一个警告。虽然我喜欢这个解决方案是的,这是真的,但在任何一个好的设计中都应该是这样:)我也认为,这是一个好的解决方案。我只是想让你检查一下,是否有一些常见的页眉/页脚控件/类“尚未准备好”用于该解决方案。这可能是你能做的最好的:)是的,基本标记是一种代码气味,这不太可能很好。如果我关闭viewstate怎么办?我不需要在大部分的页面。但是,再一次。。。在用户出现问题之前,我不知道是否需要它。您可以(而且应该)在不需要跟踪viewstate的单个控件中关闭viewstate。