![](/img/trans.png)
[英]How to open the page in new window using response.redirect in c#
[英]Using Window.Open instead of Response.Redirect to open new window?
我的頁面代碼如下所示:
<asp:Button ID="btnSearch" runat="server" Text="Search" onclick="btnSearch_Click"/>
我的方法如下所示:
protected void btnSearch_Click(object sender, EventArgs e)
{
var value = lblGraphicNameValue.Text.ToString();
Response.Redirect("Search.aspx?txtGraphicName=" +
value);
}
當前,當用戶按下“搜索”按鈕時,頁面將刷新並加載Search.aspx頁面。 我想發生的是改為在新窗口中打開Search.aspx。 我已經看過使用Window.Open,但是我不確定這是否是正確的路由,或者我是否可以使用相同的方法來傳遞變量(查詢字符串)。 有人可以指出我正確的方向嗎? 我所擁有的作品,我只希望它在一個新頁面中打開,而無需保留上一頁。
編輯:我應該提到我不能使用javascript(安全環境,每個瀏覽器都禁用了javascript)。
從我正在閱讀的內容來看,這似乎表明如果沒有javascript,從asp.net頁內打開新網頁並傳遞parms是不可行的? 這個對嗎?
下面的代碼最終完全滿足了我的需要:
<a href="<%= this.ResolveUrl("Search.aspx?id=" + lblGraphicNameValue.Text.Remove(lblGraphicNameValue.Text.Length -4)) %>"
target="_blank">Search Related</a>
此代碼執行三件事:
這確實實現了我所需的功能,而無需借助自定義類或javascript,盡管這確實使我不得不使用鏈接而不是按鈕。
使用此類。
ResponseHelper .Redirect("popup.aspx", "_blank", "menubar=0,width=100,height=100");
public static class ResponseHelper {
public static void Redirect(string url, string target, string windowFeatures) {
HttpContext context = HttpContext.Current;
if ((String.IsNullOrEmpty(target) ||
target.Equals("_self", StringComparison.OrdinalIgnoreCase)) &&
String.IsNullOrEmpty(windowFeatures)) {
context.Response.Redirect(url);
}
else {
Page page = (Page)context.Handler;
if (page == null) {
throw new InvalidOperationException(
"Cannot redirect to new window outside Page context.");
}
url = page.ResolveClientUrl(url);
string script;
if (!String.IsNullOrEmpty(windowFeatures)) {
script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
}
else {
script = @"window.open(""{0}"", ""{1}"");";
}
script = String.Format(script, url, target, windowFeatures);
ScriptManager.RegisterStartupScript(page,
typeof(Page),
"Redirect",
script,
true);
}
}
}
我認為您的工作方向正確,但您卻混淆了服務器端代碼和客戶端代碼。 window.open
是可在客戶端使用的Javascript函數。 因此,您需要從C#渲染一些Javascript以使窗口彈出。 嘗試:
protected void btnSearch_Click(object sender, EventArgs e)
{
var value = lblGraphicNameValue.Text.ToString();
ClientScript.RegisterStartupScript(this.GetType(), "newWindow", String.Format("<script>window.open('Search.aspx?txtGraphicName={0}');</script>", value));
}
這將重新呈現頁面,然后在pageload上添加一個腳本,該腳本將彈出窗口。 有點警告,這可能會被瀏覽器彈出窗口阻止程序阻止。 如果您想解決此問題,則可能無需使用Javascript將其發回到服務器即可實現。
更好的選擇是創建一個JavaScript函數,例如:
function PreviewPOSTransaction(Id)
{
if (Id != null)
{
window.open('POSTransReport.aspx?TransID=' + Id);
return true;
}
}
</script>
並在按鈕“ OnClientClick”事件上調用此函數,例如:
的OnClientClick =“PreviewPOSTransaction(1);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.