จะเรียกเมธอดใน Code Behind จาก Javascript
#1
Posted 09 July 2007 - 03:35 PM
#2
Posted 09 July 2007 - 05:48 PM
ใช้ iframe และส่งค่าผ่าน src
ส่วน server ก็รับค่าแล้วไปเรียก code Behind
น่าจะพอเป็นแนวได้นะครับ
#3
Posted 10 July 2007 - 08:07 AM
ผมเจอที่นี่ครับ แต่ไม่เข้าใจ เพราะเขียน script ไม่เป็น
ถ้าเข้าใจแล้ว บอกด้วยนะครับ
http://www.velocityreviews.com/forums/t744...ltscriptgt.html
#4
Posted 10 July 2007 - 10:21 AM
Quote
จาก url ข้างบน นี้ มันเป็นการเรียก method ของ Code Behind ด้วย Server Side Script นี่ครับ รู้สึกว่าจะยังไม่ตรงกับคำถาม
คิดว่าค่อนข้างยาก นะครับที่จะทำ Web Application แล้วไม่ต้องใช้ XmlHttpRequest protocal
เพราะถึงแม้ว่า ใน ASP.NET จะมี callback ก็ตาม แต่ก็ยังต้องพึ่ง protocal XmlHttp (protocal เดียวกับ XmlHttpRequest แต่ XmlHttp จะ work บน IE เท่านั้น) อยู่ดี
ตัวอย่าง call back http://dotnetjunkies.com/Tutorial/E80EC96F...30EECF13D7.dcik
นอกเหนือจากนั้น คงทำได้แค่ ให้ javascript สั่ง submit หรือส่งค่าไปให้ Server Side แบบตรง ๆ ด้วยการ load page นั้น ๆ แล้วล่ะครับ
#5
Posted 10 July 2007 - 02:47 PM
ถ้าจะให้ script เรียก method ใน .cs เขียนยังไง ครับ
สมมุติ ผมมี myPage.aspx และก้อมี button 1 ปุ่ม ผมจะเขียน script ยังไงให้มันไปเรียก button_click ทำงานได้ครับ
<body onclick=myScript()>
myPage.aspx.cs
void button_click()
{
label1.text = "hello";
}
#6
Posted 10 July 2007 - 04:27 PM
ขอบคุณผู้รู้อย่างสูง
#7
Posted 10 July 2007 - 09:22 PM
Response.Write("<script> var answer1= confirm('Leave tizag.com?'); if (answer1){alert('Bye bye!')} else{test1(); }; </script>")
ในตรงนี้ มันโชว์ pop up ขึ้นมา แล้วครับ แต่เวลา เกิด ยกเลิก แล้ว ผมอยากให้มัน มาทำงาน ที่ sub test1 อะครับทำไงดี ผมงงตรง การเขียน สคริป นี้ แหละครับ ใช้ไม่ค่อยเป็น ช่วยที ครับ
Public Sub test1()
'Dim deltel As String
'deltel = "Delete from Customertel"
'deltel &= " where(Cus_Id='" & Session("userid") & "' and Cus_tel='" & Txtel.Text & "')"
'comm = New SqlCommand(deltel, conn)
'comm.ExecuteNonQuery()
'Txtel.Text = ""
ListBox1.Enabled = True
'Me.Addtel.Enabled = True
'Me.EditTel.Enabled = False
'Me.Deltel.Enabled = False
'isfind = True
'listel()
End Sub
This post has been edited by Interactive: 10 July 2007 - 09:23 PM
#8
Posted 11 July 2007 - 09:46 AM
<%@ Page Language="C#" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" %> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" > <head runat="server"> <title>Untitled Page</title> </head> <body> <form id="form1" runat="server"> <div> <asp:Label ID="myLabel" runat="server" Text="Label"></asp:Label> <br /> <asp:Button ID="myButton" runat="server" Text="Call" OnClick="myButton_Click" /></div> </form> </body> </html>
Default.aspx.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void myButton_Click(object sender, EventArgs e)
{
MyClass myClass = new MyClass();
myClass.UpdateLabel(myLabel);
}
}App_Code/MyClass.cs
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
/// <summary>
/// Summary description for MyClass
/// </summary>
public class MyClass
{
public MyClass()
{
//
// TODO: Add constructor logic here
//
}
public void UpdateLabel( Label lbl)
{
lbl.Text = "Hello World!";
}
}
#9
Posted 11 July 2007 - 11:15 AM
แต่ผมขอเรียนผู้ถามทุกท่านว่า ก่อนที่จะถามคำถามเพิ่มเติมนั้นได้ดู ตัวอย่างใน
http://dotnetjunkies...30EECF13D7.dcik
ตามที่คุณ LuCisFero แนะนำไว้หรือยังครับ เพราะผมว่าในตัวอย่างนี้ได้อธิบายไว้อย่างดีอยู่แล้ว
#10
Posted 11 July 2007 - 01:11 PM
NoooM, on Jul 11 2007, 11:15 AM, said:
http://dotnetjunkies...30EECF13D7.dcik
ตามที่คุณ LuCisFero แนะนำไว้หรือยังครับ เพราะผมว่าในตัวอย่างนี้ได้อธิบายไว้อย่างดีอยู่แล้ว
ขอโทษครับ คุณ NoooM บังเอิญ ผมเข้าไปดูแล้ว มันเป็นการเรียก activate function ด้วย onclick ซึ่งยังไม่ใช่ที่ผมต้องการ
ที่ต้องการคือ ให้ script activate function ใน code behide โดยที่ไม่ผ่าน control ครับ
มันทำได้จริงๆ มั้ยครับ???
หรือต้องใช้ trick อื่นๆ ??? (แต่ผมว่ามันน่าจะได้ นะ)
คุณ LuCisFero ครับ
ขอบคุณ ที่แปะมาให้ดูอย่างละเอียด แต่นั่นเป็น html tag ที่ vs เค้า create ให้อยู่แล้วไม่ใช่หรือครับ แล้วถ้าไม่กด click ที่ myButton มันก้อจะไม่ทำงาน แต่ที่ผมอยากได้คือ ไม่กด button ก้อทำงานได้ครับ
ที่ผมต้องการทำจริงๆ ก้อคือ
1) เมื่อ user มีการปิด หน้าต่าง window โดยการ click X ที่ browser แล้ว จะให้ขึ้น confirm dialog ว่า ต้องการปิด จริงหรือเปล่า ถ้าใช่ก้อ ปิด ถ้าไม่ใช่ก้อไม่ปิด
2) ทีนี่ ถ้าไม่ปิด ก้อโอเค ไม่มีไรเกิดขึ้น แต่ถ้า user confirm ว่าจะปิด browser ต้องทำการ clear ค่าบางอย่างที่ database ก่อน ถึงจะเสร็จการทำงานทั้งหมด
ความจริงอยากทำต่อว่า
3) ถ้าเคลียร์ ค่าไม่ได้ ไม่ให้ปิด window ด้วยซ้ำ
แต่เอาข้อ 2 ให้ได้ก่อน แล้วค่อยไปข้อ 3 ครับ..
ตอนนี้ ข้อ 1 ความจริงก้อยังไม่ได้ แต่คิดว่า ไปขุดๆ เอาก้อคงได้เอง แต่ข้อ 2 เนี่ย หาที่ไหนก้อไม่เจอ ไม่รู้เค้าใช้วิธีไหนกันสิครับ ใครมีข้อเสนอแนะ ขอให้บอก บอกเป็น key word มาก้อได้ครับ จะไปหา ขุดๆ เอาเองก้อได้
แต่ถ้ามีวิธีทำก้อ ขอเลยง่ายดีครับ แหะ..
This post has been edited by spncc: 11 July 2007 - 01:25 PM
#11
Posted 11 July 2007 - 03:01 PM
Quote
ถ้าไม่ใช้ Client Side Script เห็นทีว่าจะทำไม่ได้นะครับ เสียใจด้วยนะครับ
ถ้าใช้ Client Side Script (JavaScript/VBScript) มันจะมี method ชื่อ onbeforeunload (IE only) ครับเอาไว้เช็คได้ว่าจะปิดหรือไม่ปิด
window.onbeforeunload = function () {
dosomething();
event.returnValue = 'Please click Cancel first !';
}
function dosomething() {
window.onbeforeunload = function () { } // clear event
//call ajax or redirect to clear page etc.
//หลังจากที่ ทำเสร็จก็ให้ สั่ง close window ในหน้านั้นซะ
window.navigate('your url here');
}หน้า clear
****ทำการ clear ค่าของคุณซะ แล้วก็เรียก javascript doclose()
<script>
function doclose() {
alert( "HIT");
window.opener=self;
window.open('','_parent','');
window.close();
}
</script>
</head>
<body onload='doclose()'>
</body>ซึ่งก็ทำได้แค่ว่า จะปิดหรือไม่ปิด เท่านั้นเองครับ ถ้า user ไม่ได้ click ปุ่ม Cancel แต่ click ปุ่ม OK แทน เราก็ไม่สามารถทำอะไรได้แล้วครับ
ที่เหลือ คุณก็แค่แจ้งให้ user ทราบว่า ต้องทำอะไรก่อนปิด คิดว่าคงทำได้แค่นี้นะครับ
Quote
ความจริงอยากทำต่อว่า
3) ถ้าเคลียร์ ค่าไม่ได้ ไม่ให้ปิด window ด้วยซ้ำ
ดูเงื่อนไขในข้อหนึ่งครับ
This post has been edited by LuCisFero: 11 July 2007 - 03:13 PM
#12
Posted 11 July 2007 - 05:54 PM
spncc, on Jul 11 2007, 01:11 PM, said:
NoooM, on Jul 11 2007, 11:15 AM, said:
http://dotnetjunkies...30EECF13D7.dcik
ตามที่คุณ LuCisFero แนะนำไว้หรือยังครับ เพราะผมว่าในตัวอย่างนี้ได้อธิบายไว้อย่างดีอยู่แล้ว
ขอโทษครับ คุณ NoooM บังเอิญ ผมเข้าไปดูแล้ว มันเป็นการเรียก activate function ด้วย onclick ซึ่งยังไม่ใช่ที่ผมต้องการ
ที่ต้องการคือ ให้ script activate function ใน code behide โดยที่ไม่ผ่าน control ครับ
มันทำได้จริงๆ มั้ยครับ???
หรือต้องใช้ trick อื่นๆ ??? (แต่ผมว่ามันน่าจะได้ นะ)
คุณ LuCisFero ครับ
ขอบคุณ ที่แปะมาให้ดูอย่างละเอียด แต่นั่นเป็น html tag ที่ vs เค้า create ให้อยู่แล้วไม่ใช่หรือครับ แล้วถ้าไม่กด click ที่ myButton มันก้อจะไม่ทำงาน แต่ที่ผมอยากได้คือ ไม่กด button ก้อทำงานได้ครับ
ที่ผมต้องการทำจริงๆ ก้อคือ
1) เมื่อ user มีการปิด หน้าต่าง window โดยการ click X ที่ browser แล้ว จะให้ขึ้น confirm dialog ว่า ต้องการปิด จริงหรือเปล่า ถ้าใช่ก้อ ปิด ถ้าไม่ใช่ก้อไม่ปิด
2) ทีนี่ ถ้าไม่ปิด ก้อโอเค ไม่มีไรเกิดขึ้น แต่ถ้า user confirm ว่าจะปิด browser ต้องทำการ clear ค่าบางอย่างที่ database ก่อน ถึงจะเสร็จการทำงานทั้งหมด
ความจริงอยากทำต่อว่า
3) ถ้าเคลียร์ ค่าไม่ได้ ไม่ให้ปิด window ด้วยซ้ำ
แต่เอาข้อ 2 ให้ได้ก่อน แล้วค่อยไปข้อ 3 ครับ..
ตอนนี้ ข้อ 1 ความจริงก้อยังไม่ได้ แต่คิดว่า ไปขุดๆ เอาก้อคงได้เอง แต่ข้อ 2 เนี่ย หาที่ไหนก้อไม่เจอ ไม่รู้เค้าใช้วิธีไหนกันสิครับ ใครมีข้อเสนอแนะ ขอให้บอก บอกเป็น key word มาก้อได้ครับ จะไปหา ขุดๆ เอาเองก้อได้
แต่ถ้ามีวิธีทำก้อ ขอเลยง่ายดีครับ แหะ..
ผมต้องการเหมือนคุณ Spncc ทุกประการเลยครับ
#13
Posted 11 July 2007 - 09:30 PM
การเขียน script แบบนี้ ดู engineering ดีกว่าการใส่เป็น tag base เข้าไปใน control อีก..
แสดงว่าเราไม่อาจเรียก script แล้วส่งเหมือน post message ไปถึง server ได้เลยหรือครับ
หรือว่า เมื่อ user กด Yes เพื่อ confirm การ logoff ก้อให้ redirect ไปหน้า logoff แล้วให้หน้า logoff จัดการ เรื่อง code behide ตอน page load ได้มั้ย?
แล้วพอทำเสร็จแล้ว ก้อให้เรียก script เพื่อให้ auto close อีกที
เราจะเรียก redirect จาก script ได้ยังไง ครับ?
แล้วพอเปิดอีกหน้านึงแล้ว ให้ page มันโหลดก่อน แล้วค่อยปิดตามหลังทำได้มั้ยครับ ?
ไม่เคยเขียน script ก้อแบบนี้ล่ะครับ บางทีคำสั่งง่ายๆ ก้อไม่รู้ ยังไงช่วยด้วยนะครับ
เพิ่มเติมคุณ Interactive
ผมลองทำตามแล้วเห็นว่า script ที่คุณให้ response ออกไปนั้น มันจะทำงานหลังจาก control post message ออกไปแล้ว ซึ่งในกรณีของผมทำไม่ได้ เพราะว่า เมื่อ post message ออกไปแล้ว ทำให้งานในหน้านั้นๆ หายไป (stateless) ซึ่งถ้าคุณต้องการให้ script ทำงานหลังจาก post ถือว่าโอเค แต่ถ้าไม่ใช่ ต้องใส่ script ไว้ที่ หน้า aspx แหละครับ
แต่ถ้าคุณต้องการให้ post ก่อนถึงทำงานได้ น่าจะใช้ session variable ให้เป็นประโยชน์ นะครับ ทำงานง่ายกว่า script อีก เพราะ script ที่ต้องการนั้น แค่ให้ show dialog อย่างเดียวไม่ใช่หรือครับ
เปลี่ยนเป็นใช้ dialog เพื่อเก็บค่า session แล้วใส่ code behind ไว้ใน pageload แล้วใช้ session variable เป็นตัวแจงการทำงานอีกที..
ถ้าผมเข้าใจผิดก้อ ผ่านไปได้เลยครับ
#14
Posted 12 July 2007 - 12:05 PM
ถ้าใช่ ก่อนอื่นต้องเข้าใจก่อนครับว่า javascript เป็นการทำงานของส่วน Client ส่วน Methode ที่ Code Behind นั้นเป็นการทำงานในส่วนของ Server ซึ่ง การจะให้ javascript สร้างมารถ เรียก methode ใน Server ได้ก็คงมีอยู่ทางเดียวคือการสร้าง xmlHttpRequest ขึ้นมาครับ
การทำ logout user เวลากด (X) ที่มุมขวา อาจทำได้โดยใช้ event window.onbeforeunload ช่วยเพื่อให้ทำการสร้าง xmlHttpRequests Call ไปยังส่วน Server เพื่อทำการ Clear ค่าใน Session ได้ครับ แต่!! event window.onbeforeunload จะรวมevent ทั้งการ leave ออกจากหน้าจอนั้นๆ ด้วยน่ะครับ
#15
Posted 12 July 2007 - 01:53 PM
พยายามทำให้ระบบของเรามันสอดคล้องกับธรรมชาติของสิ่งที่เราพึ่งพิง (Web) จะดีกว่านะครับ
spncc, on Jul 11 2007, 09:30 PM, said:

Help












