我最近已將我的應用程序升級到.net 4.0。我的超鏈接導航相對路徑被正確渲染時遇到問題。我通過jquery調用webmethod,加載一個usercontrol並獲取我在頁面上顯示的html。 usercontrol具有一個帶有超鏈接字段的網格視圖,該字段使用波浪號(〜)綁定到某些應用程序相對路徑。與Ajax調用不正確的超鏈接相對路徑
對於複製此問題,我創建了一個網站在IIS中的「默認網站」下面說「TestWebsite」。我在根文件夾下有一個「Test.aspx」頁面。另外我有UserControls文件夾,它具有我的用戶控件「TestUserControl.ascx」。現在我只需在頁面中調用webmethod,它將加載控件並返回html。我遇到的問題是超鏈接URL相對路徑渲染不正確。它顯示的
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;
}
用戶控件
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
Iam由於格式問題而無法在此處複製我的代碼,但我有一個簡單的GridView,這裏有一個超鏈接服務器控件,用於綁定navigateurl。
網絡上的一些搜索後,我發現,在其中提及設置AppRelativeTemplateSourceDirectory
Asp.Net single control render for AJAX calls
這種類似的問題。但即使將其設置爲AppDomainAppVirtualPath之後,它也不適用於我。
使用Server.Execute後相對URL(〜/子文件夾/)變成了給(../SubFolder/)一級
我不知道如果我缺少什麼?如果有人能幫我解決這個問題,我將不勝感激。
FYI:我使用IIS 7.5和Windows 7
感謝, PRASHANT