Эти виды вопросов всегда имеют тот же ответ: это зависит . Нет никакого волшебного правила, что необходимо следовать вслепую. Даже использование GOTO на современных языках программирования может быть выровнено по ширине: он когда-либо выгодный для использования ' goto' на языке, который поддерживает циклы и функции? Если так, почему?
, Таким образом, ответ: используйте голову и думайте о конкретной ситуации. В этом конкретном экземпляре имеют в виду, что можно всегда преобразовывать от varchar до nvarchar в базе данных, если это оказывается изменением требований.
I had a similar issue when rendering the page with PageParser.GetCompiledPageInstance() or when the url was rewritten. For some reason the HtmlAnchor always resolved incorrectly (similar to what you have above).
Ended up just using a HtmlGenericControl, since you are manipulating it server-side anyway this may be a possibility for you.
HtmlGenericControl anchor = new HtmlGenericControl("a");
anchor.Attributes.Add("href", "#");
Это должно сработать.
<a href="javascript:void(0)">text</a>
Это должно сработать.
<a href="~/#">text</a>
Решение Брендана Ковица будет работать, однако мне не удалось его реализовать из-за того, как этот элемент управления работает. В итоге мне пришлось взломать его согласно следующему коду в коде позади:
lnk.Attributes.Add("href",Page.Request.Url.ToString() + "#");
Где lnk - это HtmlAnchor.
Причина этой проблемы заключается в том, что элемент управления находится не в том же каталоге, что и страница, и .Net пытается «разумно» решить вашу проблему за вас. Вышеупомянутое будет работать, хотя, если у кого-то есть лучшее решение, я все уши.
Мой тоже отлично работает ... У меня есть пользовательский элемент управления AnchorTag.ascx:
<%@ Control Language="C#" AutoEventWireup="true" CodeBehind="AnchorTag.ascx.cs" Inherits="JavascriptScroll.AnchorTag" %>
<a id="A1" href="#" runat="server" >Anchor Tag</a>
И я добавил его как:
<%@ Register src="AnchorTag.ascx" tagname="AnchorTag" tagprefix="uc1" %>
. . .
<uc1:AnchorTag ID="AnchorTag1" runat="server" />
. .
And it renders as expected:
<a href="#" id="AnchorTag1_A1">Anchor Tag</a>
Please correct me if I'm doing something which is not expected...
Попробуйте удалить атрибут "runat" и обернуть то, что вы хотите связать;
<a href="#" >Your Link Text/Image Here</a>
РЕДАКТИРОВАТЬ: Включает вложенные пути
Мой тестовый проект отображает для меня правильную ссылку:
http://localhost:2279/WebSite1/Default.aspx#
ASPX:
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %>
<%@ Register src="control/WebUserControl2.ascx" tagname="WebUserControl2" tagprefix="uc1" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<uc1:WebUserControl2 ID="WebUserControl21" runat="server" />
</form>
</body>
</html>
Элемент управления:
<%@ Control Language="C#" AutoEventWireup="true" CodeFile="WebUserControl2.ascx.cs" Inherits="WebUserControl2" %>
<a id="A1" href="<%# URLHelper("~/#") %>" runat="server" >here</a>
Контрольный код позади:
protected string URLHelper(string s)
{
return Control.ResolveUrl(s);
}