Javascript ile hiddenfield değerini değiştirmek
December 23, 2008 at 1:46 PM
—
oozturk
Javascript ile bir hiddenfield'in değerini değiştirmek istiyorsak; javascript ile öncelikle onu bulmamız daha sonra değerini değiştirmemiz gerekir. Bu yapmak esasen çok kolay gözükse de masterpage kullandığımız zamanlarda hiddenfield kontrol'ünün id'si değiştiği için onu bulmak güç olabilir.
Aşağıdaki kod ile bu işi çözebiliriz.
var hdn = document.getElementById(<% ="\'" + HiddenField1.ClientID + "\'" %>);
Şimdi de bir örnek ile hem ajax, hem masterpage'in kullanıldığı bir ortamda hiddenfield değerini değiştirip, kontrol edelim.
1. Yeni bir proje içine bir masterpage ve bu masterpage'i kullanan bir contentpage hazırlayalım.
2. Masterpage'imize; bir scriptmanager, bir updatepanel koyalım. Updatepanel içine de bir label (Label1), bir html buton (Button1) son olarak da bir hiddenfield (HiddenField1) koyalım. Bir de head kısmına aşağıdaki kodu yazalım.
function setz() {
var hdn = document.getElementById(<% ="\'" + HiddenField1.ClientID + "\'" %>);
if(hdn)
{
hdn.value = "deneme";
__doPostBack(<% ="\'" + UpdatePanel1.ClientID + "\'" %>, '');
}
}
3. Masterpage'imizdeki Button1 kontrolümüzü tanımladığımız satıra aşağıdaki işaretli kısmı ekleyelim.
<input id="Button1" type="button" value="button" onclick="return setz();" />
4. Masterpage'imizin kod sayfasında, form load içine de aşağıdaki kodu yazalım.
Label1.Text = HiddenField1.Value;
5. Contentpage'imiz boş kalsın.
Uygulamayı çalıştıralım. Düğmeye bastığımızda, label'in yazısının deneme diye değiştiğini göreceğiz. Bunu dinamik herhangi bir olay neticesinde yapabiliriz.
Bildiğiniz gibi bir html butonunun herhangi bir .net kodu ya da kendinden bir postback özelliği yoktur. Haliyle tamamen client tarafında değeri değiştirip daha sonra UpdatePanel ile postback yaptık ki o da zaten server tarafında sadece gerekli kısmın değişmesini sağlayıp, bütün sayfanın yenilenmesini engelliyor. Aslında ajax kullandığımız için javascript içinde kullandığımız _doPostBack komutu yerine aşağıdaki kodu da kullanabilirdik.
<%= ClientScript.GetPostBackEventReference(HiddenField1, "") %>;
Ayrıca kodda bazı optimizasyonlar da yapılabilir. Misal olarak her seferinde hdn değerini eşitlemek yerine javascript genelinde bir değişken açıp oradan da tanımlayabilirdik mesela.
İyi çalışmalar dilerim.