Я недавно обновил свое приложение до .net 4.0.У меня проблема с относительными путями гиперссылки navigateurl, которые отображаются правильно.Я вызываю веб-метод через jquery, который загружает usercontrol и получает HTML, который я отображаю на странице.Пользовательский контроль имеет сетку с полем гиперссылки, который привязан к относительным путям некоторых приложений с помощью тильды (~).
Для воспроизведения этой проблемы я создал веб-сайт с именем «TestWebsite» в разделе «Default Website» в IIS.У меня есть страница «Test.aspx» в корневой папке.Также у меня есть папка UserControls, в которой есть мой пользовательский контроль "TestUserControl.ascx".Теперь я просто вызываю свой веб-метод на странице, который загружает элемент управления и возвращает HTML.Проблема, с которой я столкнулся, заключается в том, что относительный путь к гиперссылке отображается неправильно.Он отображает
http://localhost/SubFolder/Sample1.aspx вместо того, чтобы начинаться с моей корневой папки (TestWebsite)
http://localhost/TestWebsite/SubFolder/Sample1.aspx.
Вот пример кода
Test.aspx
<div>
<script type="text/javascript">
$(document).ready(function () {
$.ajax({
type: "POST",
url: "Test.aspx/TestMethod",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
$("#result").html(msg.d);
}
});
});
</script>
</div>
<div id="result"></div>
Test.aspx.cs - webmethod
[WebMethod]
public static string TestMethod()
{
StringWriter tw = new StringWriter();
Control control = null;
Page page = new Page();
try
{
control = page.LoadControl("~/UserControls/TestUserControl.ascx");
}
catch (Exception ex)
{
string name = ex.Message;
}
HtmlForm form = new HtmlForm();
form.ID = "_form";
page.Controls.Add(form);
form.Controls.Add(control);
page.Controls.Add(form);
HttpContext.Current.Server.Execute(page, tw, true);
string html = tw.ToString();
return html;
}
UserControl
protected void Page_Load(object sender, EventArgs e)
{
DataTable dt = new DataTable();
dt.Columns.Add("TestLink");
DataRow dr = dt.NewRow();
dr["TestLink"] = "~/SubFolder/Sample1.aspx";
dt.Rows.Add(dr);
dr = dt.NewRow();
dr["TestLink"] = "~/SubFolder/Sample2.aspx";
dt.Rows.Add(dr);
GVTest.DataSource = dt;
GVTest.DataBind();
}
TestUserControl.ascx
Я не могу скопировать свой код здесь из-за проблем с форматированием, но у меня есть простое представление сетки с серверным элементом управления гиперссылкой, где я привязываю navigateurl.После некоторого поиска в Интернете я обнаружил эту похожую проблему в
Рендеринг одного элемента управления Asp.Net для вызовов AJAX
, где упоминалось, что он устанавливает AppRelativeTemplateSourceDirectory.но даже после установки этого значения в AppDomainAppVirtualPath это не работает для меня.
После Server.Execute относительный URL (~ / SubFolder /) изменяется на один уровень выше, давая (../SubFolder/)
Я не уверен, что что-то пропустил?Буду признателен, если кто-нибудь поможет мне решить эту проблему.
К вашему сведению: я использую IIS 7.5 и windows 7.
Спасибо, Прашант