3.11.2012

yeni sayfada açma kodu c#

SORU: response.redirect ile yönlendirilecek sayfayı yeni sayfa da açmak
merhaba herkese,

Response.Redirect ile açmak istediğimiz sayfaya ait parametreler gönderebiliyormuyuz.
mesala window.open da oldugu gibi genişliği, statusbarı vs vs. en önemliside yeni bir tarayıcı* sayfasında açmak istiyorum.window.open malesef popup olarak açıyor :( 
ben target=_blank yazmak istiyorum. response redirect bu işi yapamıyorsa bunu javascript le yapabilirmiyim popup olmayan yeni sayfa .

ne yapmalıyım? 


Cevaplar

1. Bu durumda Response.Redirect kullanmamalısınız. Bunun yerine çıktıya yeni sayfayı açacak olan Javascript kodunu yazabilirsiniz.

Aşağıdaki örneği inceleyiniz:

<script runat=server>
   public void btn_click(...)
   {
      Response.Write("<script>window.open('falanca.html')</script>");
   }
</script>

...

<asp:button ... on_click="btn_click"/>

Bu şekilde çıktıya yazdığınızda sayfanın en üstüne yazılır. (Test etmek için kaynağı görüntüleyin.) Script çalıştığında eski sayfanız yerinde durur, yeni pencerede falanca.html açılır.
fizikci
28 Mart 2006 11:15
2. 
Response.Write("<script></script>")

sorun çıkartabiliyor, eğer sorun olursa şöyle yazın:

Response.Write("<scr"+"ipt></scr"+"ipt>")

fizikci
28 Mart 2006 11:18
3. cevap için teşekkür ederim ama ben popup olmamasınıda istiyorum.
sayfa popup engelleyiciye takılmasın istiyorum, çok şeymi istiyorum :(
kullanııcılarımın çogu butona basıyorum bişi olmuyo diyo,
popup engelleyicinin uyarısını anlamıyo bile
cetinz
28 Mart 2006 11:48
4. window.open'ı sadece tek parametre ile çalıştırırsanız "target=_blank" yapmış olursunuz zaten. Bunu bir deneyin.

window.open("falanca.html");

fizikci
28 Mart 2006 12:32
5. ben sizi anlıyorumda sayın fizikçi ama kendimi anlatamıyorum sanırım.
tm target=_blank oldu.
yalnız bu yeni sayfa popup açılıyor. benim sıkıntım popup olmasında ayrıca :(
cetinz
28 Mart 2006 12:41
6. Eğer yanlış anlamadıysam, bir nevi lookup sayfası açmak istiyorsunuz. Server taraflı bu işi yapmaktansa, HTML buton kullnıp onClick olayında çağırsanız nasıl olur diye sormak istiyorum.

Wesselam...
mennan
28 Mart 2006 13:50
7. Şöyle bişey denedim oldu. Bu popup değil. (hem de target=_blank :)
<body onload="aydi.click()">
<a id=aydi href="http://www.bilisim-kulubu.com" target="_blank">Falanca</a>
</body>

Tabi çok saçma bir attraksiyon oldu bu. Sırf window.open'ı kullanmamak için böyle bir şey yazdım. Mennan'ın da dediği gibi probleminizi başka bir şekilde çözmeye çalışsanız daha iyi olur. (Bazen biz programcılar bir çözüm yöntemine takılır ısrarla o yöntemi deneriz. Bu gibi durumlarda iki dakka dışarı çıkıp hava almak, biraz dinlenip öyle devam etmek çok faydalı oluyor. Problemi daha iyi teşhis edip, daha güzel çözüm geliştirebiliyorsunuz.)
fizikci
28 Mart 2006 14:03
8. 

private void devamBtn_Click(object sender, System.EventArgs e)
{
   seviye=seviyeDDL.SelectedValue;
   ilce=ilceDDL.SelectedValue;
   okul=okulDDL.SelectedValue;
       
   string script= "<scr"+"ipt> " ;
   if (listeDDL.SelectedValue=="ilcebasari")
      script+="window.open('ilcebasari.aspx?seviyeID="+seviye+"&ilceID=0&okulID=0')"; 
   else if (listeDDL.SelectedValue=="ilk100" & ilce=="0" )
      script+="window.open('liste.aspx?seviyeID="+seviye+"&ilceID=0&okulID=0&ilk100=1')"; 
   script+= "</scr"+"ipt>";

   Response.Write(script);
}


bu butonun click olayı,
şimdi ben anlamadım ki bu butonu html buton yapsam nereye yazacam a tag ını ve a nın href degerini

:( yoruldum galiba, kardeşim benim sitemde dolanmak istiyosanız popup engelleyiciyi kaldırcaksınız diyesim geliyo ama diyemiyorum, müşteri veli nimetimizdir nitekim. :D
cetinz
28 Mart 2006 15:12
9. :)

Server tarafında yapmayalım bu işi. Şöyle yapalım :

<button onclick="devamEt()">Devam</button>
<script>
function devamEt()
{
   seviye = seviyeDDL.value;
   ilce = ilceDDL.value;
   okul = okulDDL.value;
 
   window.open('liste.aspx?seviyeID='+seviye+'&ilceID='+ilce+'&okulID='+okul); // artık nasılsa...
}
</script>

Burada servera gidip gelmeden (postback yapmadan) butona tıklanınca popup'ımızı açıyoruz.

Pekala popup yapmak istemezsek ne yapacağız? Öncelikle popup nedir? Popup, Javascript ile açılan browser penceresine denir. Madem öyledir başka pencerede açmak istiyorsanız popup'dan kurtuluş çaresi yoktur. Sadece <a href="..." target=_blank></a> gibi bir linke kullanıcı tıklarsa Javascript kullanılmamış oluyor, popup blockerlar bunu görmezden geliyor. Ama bunu nasıl yapacağız? Şöyle birşey yapmak mümkün: Bir tane <a id=devamLink href="degisecek">DEVAM</a> şeklinde link tanımlarız (yazarız). Sonra combo'lardan değer seçildikçe bu link'in href'ini değiştiririz. Aşağıdaki gibi:

<select id=seviyeDDL onchange="changeDevamLink()">
   <option value=1>Seviye 1</option>
   <option value=2>Seviye 2</option>
</select>
<select id=okulDDL onchange="changeDevamLink()">
   <option value=1>Okul 1</option>
   <option value=2>Okul 2</option>
</select>
<select id=ilceDDL onchange="changeDevamLink()">
   <option value=1>İlçe 1</option>
   <option value=2>İlçe 2</option>
</select>

<a id=devamLink href="degisecek" class="butonGibi">DEVAM</a>

<script>
function changeDevamLink()
{
   seviye = seviyeDDL.value;
   ilce = ilceDDL.value;
   okul = okulDDL.value;

   devamLink.href = 'liste.aspx?seviyeID='+seviye+'&ilceID='+ilce+'&okulID='+okul); // artık nasılsa...
}
</script>

fizikci
28 Mart 2006 15:45
10. Bir diğer yöntem ise şudur:

<form action="liste.aspx" target="_blank" method="GET">
   <select id=seviyeDDL>
      <option value=1>Seviye 1</option>
      <option value=2>Seviye 2</option>
   </select>
   <select id=okulDDL>
      <option value=1>Okul 1</option>
      <option value=2>Okul 2</option>
   </select>
   <select id=ilceDDL>
      <option value=1>İlçe 1</option>
      <option value=2>İlçe 2</option>
   </select>

   <input type=submit value="DEVAM">
</form>

Form'un target'ına dikkat. Method'un GET ya da POST olması tercih meselesi.

Tabi bunları ASP.NET ortamında yapmak zor olabilir. Üzebilir programcıyı. Biz de boşuna PHP'yi savunmuyoruz zaten. :) PHP gibi script dilleri, -ASP.NETJSP gibi- derlenen, ultra high technology dilleri rahatlıkla dövebiliyor. Neden? Çünkü basit, esnek, bütün kontrolü programcıya veriyor. Eğer programcı HTML ve Javascript biliyorsa istediğini yapabiliyor.
fizikci
28 Mart 2006 15:53
11. yarın deneyecegim son 2 öneriyi, teşekkürler fizikçi, teşkkürler mennan
cetinz
28 Mart 2006 18:29
12. 
function FormOnay()
{
    seviye=document.Form1.seviyeDDL.value;
    ilce=Form1.ilceDDL.value;
    okul=Form1.okulDDL.value;

    if (Form1.listeDDL.value=="ilcebasari"  )
        action="ilcebasari.aspx?seviyeID="+seviye+"&ilceID=0&okulID=0";   
    else
        action=Form1.listeDDL.value+".aspx?seviyeID="+seviye+"&ilceID="+ ilce+"&okulID="+ okul+"";

    alert(Form1.action);
    Form1.target="_blank";
    Form1.submit();
}

...
...
<INPUT id="devamBtn" onClick="return FormOnay();" type="button" value="Devam">

böyle herşey tm. Yalnız bu action olayından sonra bu sayfa üzerinde herhangi bir işlemde servera bir gönderme yapıldıgında action ile yapılmış son aksiyon tekrar yapılıyor :(

bi çözümü olabilir mi ki? ben baya düşündüm ama
cetinz
29 Mart 2006 17:20
13. bu arada form submitle açmaya çalıştıgınız yeni sayfa için şöyle bir hata alabilrisiniz.

The viewstate is invalid for this page and might be corrupted.

ozaman yapmanız gereken açılacak yeni sayfanın üst tanımlama kısmına enableViewStateMac="False" eklemek. document özelliklerinde enableViewStateMac varsayılan olarak false gelmesine ragmen, tanımlama kısmında yazmıyor. siz tanımlama kısmına yazmalısınız.

tanımlama kısmı derken nerden bahsediyorum ama di mi, buna da açıklık getirmek lazım :D

<%@ Page language="c#" Codebehind="liste.aspx.cs" AutoEventWireup="false" Inherits="ILSTS.liste" enableViewStateMac="False"%>


c# asp.net Textbox[i].tex şekilinde döngü

örnek fofm



Eğer resimdeki gibi bir formunuz var ve satırları tek tek kayıt etmeyi planlıyosanız, eminim aşağıdaki kod daha kolay olduğu kadar işinize daha çok yarayacaktır.
TextBoxların içinde yazan kırmızı renkli yazılar o TextBoxların ID'lerini göstermektedir
Eğer MasterPage kullanmıyorsanız;
Gönder butonunun click olayına;
1
2
3
4
5
6
7
8
for (int i = 1 ; i < 10; i++)
{
     if (((TextBox)(FindControl("TextBoxad" + i))).Text != "")
     {
    Response.Write(((TextBox)(FindControl("TextBoxad" + i))).Text);
     }
}
Eğer MasterPage kullanıyorsanız;
Gönder butonunun click olayına;
1
2
3
4
5
6
7
8
for (int i = 1 ; i < 10; i++)
{
 if (((TextBox)(FindControl("ctl00:ContentPlaceHolder1:TextBoxad" + i))).Text != "")
    {
    Response.Write(((TextBox)(FindControl("ctl00:ContentPlaceHolder1:TextBoxad" + i))).Text);
     }
}

ctl00 ve ContentPlaceHolder1 değerleri standart gelmektedir. Bunun kontrolünü, yaptığınız sitenin kaynak koduna girerek yapabilirsiniz.
Bu kodu sadece TextBox için değil tüm asp.net web kontrolleri için kullanabilirsiniz.