PDA

View Full Version : Id trong Web User Control...help me



bizz
09-04-2008, 14:25
mình có file test.ascx(Web User Control)chứa thẻ div có id = "div1"...sau đó mình nhúng file test.ascs vào 1 file index.aspx...khi mình build và run file index.aspx...View Source thì thấy id của thẻ div tự thêm 1 đoạn mã nữa(mình đoán là trong lúc run nó tự sinh ra...)

Ai có cách nào để lưu jữ lại id ban đầu của thẻ div không(ko thay đổi id như trường hợp trên)vì mình cần lấy lại id của thẻ div...ai bik và đã làm qua thì reply nhe(có code ví dụ thì càng tốt)...thanks nhìu nhìu...

hellangle381
09-04-2008, 15:36
Vậy là thẻ div của bạn để runat="server".
Có hai cách:
+ Bỏ thuộc tính runat="server" của thẻ này.
+ Hoặc có thể dùng thuộc tính ClientID để lấy id thực sự được sinh ra

bizz
09-04-2008, 15:40
Vậy là thẻ div của bạn để runat="server".
Có hai cách:
+ Bỏ thuộc tính runat="server" của thẻ này.
+ Hoặc có thể dùng thuộc tính ClientID để lấy id thực sự được sinh ra

Thanks hellangle381...vì mình phải lấy lại id trong code .cs nên ko thể bỏ thuộc tính runat="server" hoặc dùng thuộc tính ClientID được...híc híc

hellangle381 còn cách nào nữa không vậy...tui điên cái đầu với cái id này 2 ngày rồi...

retanchi
09-04-2008, 16:26
Chào "bizz", khi bạn dùng thuộc tính runat="server" cho <div> bên "Web User Control", thì khi xem source nó thay đổi id. Theo mình biết thì khi xử lý bên server(file .cs của Web User Control) mình vẫn dùng id ban đầu mà mình định nghĩa. Nếu bạn có xử lý JavaScript cho <div> đó thì bạn mới quan tâm đến việc thay đổi tên. Id phát sinh tự động là IdCuaWebUserControlTrongTrangAspx_IdBanĐầuCủa ThẻDiv

Bạn nên lưu ý thêm:
1. Khi xem source html có thể có hay không có thẻ div bên Web UserControl phát sinh ra vì mình đã thử trong hàm Onload của WebUserControl mình dùng this.divId.Visible = false; khi đó thẻ <div> ko dc sinh ra.
2. Tránh đặt id cho các control trong trang aspx trùng với tên của các control trong WebUserControl mà sau khi đã tự động phát sinh id mới. Vì khi đó JavaScrip không thể hiểu control nào khi có nhiều control cùng id.

Hy vọng giúp ích dc bạn!

bizz
09-04-2008, 16:35
Chào "bizz", khi bạn dùng thuộc tính runat="server" cho <div> bên "Web User Control", thì khi xem source nó thay đổi id. Theo mình biết thì khi xử lý bên server(file .cs của Web User Control) mình vẫn dùng id ban đầu mà mình định nghĩa. Nếu bạn có xử lý JavaScript cho <div> đó thì bạn mới quan tâm đến việc thay đổi tên. Id phát sinh tự động là IdCuaWebUserControlTrongTrangAspx_IdBanĐầuCủa ThẻDiv

Bạn nên lưu ý thêm:
1. Khi xem source html có thể có hay không có thẻ div bên Web UserControl phát sinh ra vì mình đã thử trong hàm Onload của WebUserControl mình dùng this.divId.Visible = false; khi đó thẻ <div> ko dc sinh ra.
2. Tránh đặt id cho các control trong trang aspx trùng với tên của các control trong WebUserControl mà sau khi đã tự động phát sinh id mới. Vì khi đó JavaScrip không thể hiểu control nào khi có nhiều control cùng id.

Hy vọng giúp ích dc bạn!


Thanks retanchi đã góp ý...hiện tại thì chỉ wan tâm đến việc làm sao để lưu jữ iđ ban đầu để khi wa trang aspx lấy lại được...

retanchi có cách nào(code ví dụ thì càng tốt) để làm việc này hok...xin chỉ jáo...

retanchi
09-04-2008, 16:56
//WebUserControl1.ascx
<div id="divId" runat="server"></div>

//WebUserControl1.ascx.cs
public HtmlGenericControl MyDiv
{
get { return this.divId; }
}

//WebForm.aspx
<table>
<tr><td><uc1:WebUserControl1 ID="webUserControl11" runat="server" /></td></tr>
<tr><td>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /></td></tr>
</table>

//WebForm.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
this.webUserControl11.MyDiv.InnerHtml = "Hello World!";
}

//Bạn có thể viết các phương thức tùy thích cho WebUserControl

bizz
09-04-2008, 17:06
//WebUserControl1.ascx
<div id="divId" runat="server"></div>

//WebUserControl1.ascx.cs
public HtmlGenericControl MyDiv
{
get { return this.divId; }
}

//WebForm.aspx
<table>
<tr><td><uc1:WebUserControl1 ID="webUserControl11" runat="server" /></td></tr>
<tr><td>
<asp:Button ID="Button1" runat="server" Text="Button" onclick="Button1_Click" /></td></tr>
</table>

//WebForm.aspx.cs
protected void Button1_Click(object sender, EventArgs e)
{
this.webUserControl11.MyDiv.InnerHtml = "Hello World!";
}

//Bạn có thể viết các phương thức tùy thích cho WebUserControl


trong file .ascx... mình đã đổ data vào thẻ div rài...trong file .aspx mình chỉ mún show/hide cái thẻ div đó(dùng javascript)...nhưng mình ko tài nào lấy đc id ban đầu của nó... bạn hĩu ý mình roài chứ... nếu retanchi có cách làm nào hay hay thì bày mình với... thanks nhìu nhe... :)

retanchi
10-04-2008, 08:48
//Theo như bạn nói, fill data ở aspx.cs và ẩn/hiện ở html phải không? Hy vọng sẽ giúp ích dc bạn. Nếu không dc, mình cũng pó tay!

//WebUserControl1.ascx
<div id="divId" runat="server"></div>

//WebUserControl1.ascx.cs - Fill dữ liệu như bạn nói
protected void Page_Load(object sender, EventArgs e)
{
//Fill dữ liệu
string data = "";
data += "Cong cha nhu nui Thai Son <br />";
data += "Nghia me nhu nuoc trong nguon chay ra <br />";
data += "Mot long tho me kinh cha <br />";
data += "Cho tron chu hieu moi la dao con";
this.divId.InnerHtml = data;
}

//WebForm.aspx
//HTML
<uc1:WebUserControl1 ID="myWebUserId" runat="server" />
<br /><hr /><br />
<input id="btnVisible" type="button" value="Hiện" onclick="Visibility(true)"/>
<input id="btnInvisible" type="button" value="Ẩn" onclick="Visibility(false)" />

//WebForm.aspx
//JavaScript
<script language="javascript" type="text/jscript">
function GetControl(id){
var elem = (document.all) ? document.all(id) :document.getElementById(id);
return elem;
}

function Visibility(value){
var elem=GetControl("myWebUserId_divId");
if(elem!=null){
if(value==null){
value=true;
}
if(value){
elem.style.visibility="visible";
}
else{
elem.style.visibility="hidden";
}
}
}
</script>

//////////////////////////////////////////////////////////////////////////
id của thẻ <div> trong WebUserControl là id="divId"
id của WebUserControl trong trang aspx là ID="myWebUserId"
Khi đó id của thẻ <div> tự động phát sinh khi sinh ra mã Html là id="myWebUserId_divId"
//////////////////////////////////////////////////////////////////////////
PS: Do bạn không nói rõ yêu cầu và khi tui hỏi có quan tâm đến JavaScript hay ko, bạn bảo là chưa quan tâm. Và bài trả lời trước đây tui cũng có nói id phát sinh tự động rồi mà.

bizz
11-04-2008, 16:44
//Theo như bạn nói, fill data ở aspx.cs và ẩn/hiện ở html phải không? Hy vọng sẽ giúp ích dc bạn. Nếu không dc, mình cũng pó tay!

//WebUserControl1.ascx
<div id="divId" runat="server"></div>

//WebUserControl1.ascx.cs - Fill dữ liệu như bạn nói
protected void Page_Load(object sender, EventArgs e)
{
//Fill dữ liệu
string data = "";
data += "Cong cha nhu nui Thai Son <br />";
data += "Nghia me nhu nuoc trong nguon chay ra <br />";
data += "Mot long tho me kinh cha <br />";
data += "Cho tron chu hieu moi la dao con";
this.divId.InnerHtml = data;
}

//WebForm.aspx
//HTML
<uc1:WebUserControl1 ID="myWebUserId" runat="server" />
<br /><hr /><br />
<input id="btnVisible" type="button" value="Hiện" onclick="Visibility(true)"/>
<input id="btnInvisible" type="button" value="Ẩn" onclick="Visibility(false)" />

//WebForm.aspx
//JavaScript
<script language="javascript" type="text/jscript">
function GetControl(id){
var elem = (document.all) ? document.all(id) :document.getElementById(id);
return elem;
}

function Visibility(value){
var elem=GetControl("myWebUserId_divId");
if(elem!=null){
if(value==null){
value=true;
}
if(value){
elem.style.visibility="visible";
}
else{
elem.style.visibility="hidden";
}
}
}
</script>

//////////////////////////////////////////////////////////////////////////
id của thẻ <div> trong WebUserControl là id="divId"
id của WebUserControl trong trang aspx là ID="myWebUserId"
Khi đó id của thẻ <div> tự động phát sinh khi sinh ra mã Html là id="myWebUserId_divId"
//////////////////////////////////////////////////////////////////////////
PS: Do bạn không nói rõ yêu cầu và khi tui hỏi có quan tâm đến JavaScript hay ko, bạn bảo là chưa quan tâm. Và bài trả lời trước đây tui cũng có nói id phát sinh tự động rồi mà.

Thanks retanchi nhìu nhe...mình có cách xử lý cái này...vẫn dùng javascript...duyệt wa các element của form...cái nào có id.indexOf(id ban đầu) thì mình xử lý nó...