iT邦幫忙

0

ASP.NET MasterPage+JavaScript問題

各位大大好:
想請教,我的aspx頁面若套用MasterPage的話,使用JavaScript來抓取var parent = document.getElementById("members");
alert(parent);
抓出來的值都是null,都抓不到,若把MasterPage拿掉就可以正常的抓到值了!

這次的例子是:
a.aspx有個HiddenField , button按下後會呼叫b.aspx
<asp:HiddenField ID="members" runat="server" />
protected void btn_member_directory_Click(object sender, EventArgs e)
{
Response.Write("<script>window.open('./b.aspx?','','scrollbars=1,width=600,height=700')</script>");
}

在b.aspx裡要取得a.aspx裡HiddenField的ID,並傳值到a.aspx裡
<script type="text/javascript">
function Output() {
var parent = window.opener.document.getElementById("members");
alert(parent);//測試用的alert,alert出來的值都為null
parent.value = "abc";
window.close();
};
</script>
<input id="btn_confirm" type="button" value="確認" onclick="Output()" />

目前測試好像是MasterPage影響的,可是不知道如何解決,不知各位先進是否有遇過套用MasterPage的種種問題呢?
我使用的經驗是套用MasterPage還要用JavaScript有些JavaScript就無法使用,不知道如何解決,再請各位指教了,謝謝!

外獅佬 iT邦大師 1 級 ‧ 2013-06-24 10:15:59 檢舉
這問題,有邦友已經問過了,請自行搜尋哦~

2 個回答

6
丁丁 (Dean)
iT邦大師 6 級 ‧ 2013-06-24 10:23:47
最佳解答

因為 ASP.NET 網頁加上 masterpage時,為了讓每個控制項的id是唯一的,所以在編譯後render出來的頁面,每個ASP控制項的id都會被附予新的id

請參考 解決使用MasterPage,javascript取不到控制項
http://alen1985.pixnet.net/blog/post/27003105-%E8%A7%A3%E6%B1%BA%E4%BD%BF%E7%94%A8masterpage%EF%BC%8Cjavascript%E5%8F%96%E4%B8%8D%E5%88%B0%E6%8E%A7%E5%88%B6%E9%A0%85

看更多先前的回應...收起先前的回應...
leo226 iT邦新手 5 級 ‧ 2013-06-24 10:53:57 檢舉

這方法昨天有試過,抓在同一個page下有套用master的control ID是可以抓的到的,不過在我這個例子我是需要從b.aspx抓取到a.aspx的某個control ID的值,所以會用window.opener.document.getElementById("members");來抓取前一頁開啓這頁面裡的control ID,套用這個方法window.opener.document.getElementById("<%=members.ClientID %>");會報錯,說members不存在於目前內容中,正確的寫法不知道該如何寫?

temo iT邦新手 1 級 ‧ 2013-06-24 11:33:50 檢舉

不知我理解的有沒有錯,畢竟我對web這塊沒很熟,是不是呼叫window.opener.document.getElementById("members");
這段是呼叫到MasterPage呢?你應該是要去呼叫a.aspx吧
以前有寫過類似的,不過也忘了該怎麼呼叫....有錯的話幫我把我留言這篇刪了

fillano iT邦超人 1 級 ‧ 2013-06-24 11:47:33 檢舉

既然要用的id是在a.aspx,那在b.aspx呼叫members.ClientID應該沒用吧XD

leo226 iT邦新手 5 級 ‧ 2013-06-24 19:19:30 檢舉

temo:這段主要不是呼叫MasterPage哦,主要是要呼叫a.aspx裡的控制項ID,a.aspx的頁面有套用MasterPage
fillano:主要是要在b.aspx呼叫a.aspx的ID沒錯,正是要解決這個問題,所以才會用window.opener.document.getElementById("members");來呼叫~因為b.aspx是由a.aspx打開的!但還是取不到值!

依照你的需求
我用個 Walkaround 的解法

&lt;pre class="c" name="code">Response.Write("&lt;INPUT TYPE=hidden NAME='members' VALUE='" + members_value +"'>");

給你參考一下...

不過我建議, 你可以請教同事, 瞭解一下 .Net, HTML, JS or jQuery 間的交互關係 ^^"

leo226 iT邦新手 5 級 ‧ 2013-06-27 08:54:55 檢舉

leo226提到:
將hidden改成一般html的標籤,即可取到值
<input id="members" name="members" type="hidden" />
謝謝

4
aqr199
iT邦新手 2 級 ‧ 2013-06-25 09:11:19
&lt;pre class="c" name="code">
var sWin = window.open('./b.aspx?','','scrollbars=1,width=600,height=700');
sWin.opener = this;
leo226 iT邦新手 5 級 ‧ 2013-06-27 08:54:45 檢舉

將hidden改成一般html的標籤,即可取到值
<input id="members" name="members" type="hidden" />
謝謝

我要發表回答

立即登入回答