星期一, 8月 11, 2008

如何用Javascript去使用server的method

這是小鋪上面的問題..我之前也碰到過..因為之前也是想了很久找了很久才解決的..所以..把想法和技巧整理一下..讓大家參考..

其實javascript跟server端的語言本來就是八竿子打不著關西的傢伙..可是卻有需要在某時某刻互相聯絡一下..所以我們可以用到一些小技巧來當他們之間的媒人..讓他們倆可以哥倆好的..互相溝通一下..那媒人是誰..就是..javascript的__doPostBack這個method..我們在.net的html裡常常可以看到這個method..他主要是做postback的工作..然後可以帶入參數進去..讓server端的可以知道是誰在做postback..這是.net很重要的js..我們看一下..

function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}

好..現在進入主題..那怎麼做了..我的方式是用linkbutton去做這媒介..然後把linkbutton的text屬性變成空白(這樣linkbutton就隱形了)..之後在server端寫下linkbutton的click事件..這樣就設定完畢..

所以如果我們要在client端執行server端的程式..我們就把想要在server端執行的程式寫在linkbutton的click事件裡..然後在client端用js去呼叫__doPostBack('LinkButton1','')..我們就可以執行linkbutton的click的事件..直接看原始碼可能比較清楚..

.aspx
<body>
<form id="form1" runat="server">
<div>
<input id="Button1" type="button" value="這是javascript的按鈕" onclick="jsButton();" />
<asp:LinkButton ID="LinkButton1" runat="server" OnClick="LinkButton1_Click"></asp:LinkButton>
</div>
</form>

<script type="text/javascript">
function jsButton()
{
__doPostBack('LinkButton1','');
}
</script>

</body>

.cs
public partial class jsCallServerMethods : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{

}
protected void LinkButton1_Click(object sender, EventArgs e)
{
Response.Write("這是server端的程式");
}
}

這樣就可以完成我們需要的效果了..SurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerdSurpriseNerd..

6 則留言:

提到...

有個問題想請教你一下,
你這個作法我有實作過,
但我想讓__EVENTARGUMENT這個hidden帶一個值,如果在後端取到這個1捏 ^^"
因為我想用來做分頁判斷用。
__doPostBack('ChangePageBtn','1')

Bibby 提到...

我不太懂你的問題..^^||..

我猜..你用Request.Form["__eventargument"]
去接你的參數ㄅ..試試看..

dxyc 提到...

你好

有個問題請教你一下,
如果我想要在JavaScript運算出來的值,
傳至server端做運用,
該如何做?

謝謝

Bibby 提到...

你在寫入時
__doPostBack('ChangePageBtn','你要傳的值');

接收時..
Request.Form["__eventargument"]

試試看ㄅ..

yhbo2000 提到...

Bibby大你好

我試了你的方法,可是卻還是發生錯誤
以下
無效的回傳或回呼引數。已在組態中使用 pages enableEventValidation="true"/ 或在網頁中使用 %@ Page EnableEventValidation="true" % 啟用事件驗證。基於安全性理由,這項功能驗證回傳或回呼引數是來自原本呈現它們的伺服器控制項。如果資料為有效並且是必需的,請使用 ClientScriptManager.RegisterForEventValidation 方法註冊回傳或回呼資料,以進行驗證。

這是有傳參數過去的時候會發生上述錯誤
__doPostBack('LinkButton1','1');

但是如果沒有傳參數,就會正確,像這樣
__doPostBack('LinkButton1','');

這樣要怎麼解決?

Bibby 提到...

去aspx最上面加上..EnableEventValidation="false"
看看可不可以..