PDA

View Full Version : مشکل اساسی با Confirm



mehdi58
سه شنبه 23 خرداد 1385, 10:18 صبح
سلام
من برای اینکه بتونم از Confirm استفاده کنم کد زیر رو نوشتم :


<script language="javascript">
function viewConfirm()
{
return confirm('my Message');
}
</ script >


و همچنین :


Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
Button1.Attributes.Add("Onclick", "return viewConfirm();")
End Sub


اما مشکلی که با این روش داشتم این بود که وقتی صفحه واسه اولین بار Load میشد و اولین مرتبه روی دکمه کلیک می کردم کادر پیغام ظاهر نمی شد اما واسه کلیکهای بعدی این اتفاق نمی افتاد و درست کار می کرد !!!!!

سوال 1 ) چرا این اتفاق می افته ؟ آیا مشکل از Browser‌ هست یا از Code‌؟

بدون اینکه به جواب سوال بالا برسم از روش زیر استفاده کردم :


Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
'************************************************* *********************
Response.Write("<script language='javascript'> confirm('my Message')</script>")
'************************************************* *********************
' another code '************************************************* *********************
'Dim strJ As New System.Text.StringBuilder("")
' strJ.Append("<script language='javascript'>")
' strJ.Append("var ok = confirm('Are you sure?');")
' strJ.Append("if (ok) {document.submit();}")
' strJ.Append("</script>")
'Response.Write(strJ.ToString())
End Sub



که با استفاده از هر دو روش مشکلم حل شد .

سوال دوم ) اما این مشکل بزرگ من هنوز حل نشده و امیدوارم یکی واضح بگه که جوابش چی میشه .

من میخوام وقتی کاربر روی Button کلیک کرد ابتدا یه پیغام ظاهر بشه مبنی بر اینکه آیا تمایل داره عملی رو که انجام داده ‏ دوباره انجام بده یا خیر ؟ اگه جوابش مثبت بود اون وقت Visible‌مربوط به یه کنترل ( مثلا Panel ) برابر True‌بشه . در غیر اینصورت صفحه جاری Refresh بشه .
در حقیقت من به خروجی Confirm‌ میخوام دسترسی داشته باشم البته این رو هم میدونم که خروجی Confirm یکی از دو عبارت True یا False هست .
مشکل من فقط در نگهداری این مقداره . من خیلی دنبال این موضوع گشتم و حتی یه جواب هم پیدا کردم اما کار نکرد که نکرد . جوابی که پیدا کردم این بود :

First add a hidden field to your html document, for example:
Code:


< input type="hidden" name="myHiddenField" id="myHiddenField"/ >


Then change your script to this:
Code:


Dim sb As New StringBuilder("")
sb.Append("<script language='javascript'>")
sb.Append("var bConfirm = confirm('Are you sure?');")
sb.Append("var hdnField = document.getElementById('myHiddenField');")
sb.Append("if(hdnField){hdnField=bConfirm;}")
sb.Append("if (bConfirm) {document.submit();}")
sb.Append("</script>")
Response.Write(sb.ToString())


This will write the value of the confirm into the hidden field which will then be available to your server-side code after postback... for example in your vb.net code you could do something like this:
Code


dim bConfirm as Boolean
if Not IsNothing(Request.Form("myHiddenField")) then
bConfirm = cbool(Request.Form("myHiddenField"))
If bConfirm Then
'do something for example : panel1.visible=true
Else
'panel2.visible=true
' OR
'Response.Redirect("WebForm1.aspx")
end if
end if
اما با خطای زیر روبرو شدم :

Input string was not in a correct format.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.FormatException: Input string was not in a correct format.

Source Error:
Line 65: Dim bConfirm As Boolean
Line 66: If Not IsNothing(Request.Form("myHiddenField")) Then
Line 67: bConfirm = CBool(Request.Form("myHiddenField"))
Line 68: If bConfirm Then
Line 69: 'do something for example : panel1.visible=true

Source File: C:\Inetpub\wwwroot\WebApplication3\WebForm1.aspx.v b ** Line: 67


فایل رو هم ضمیمه کردم.
لطفا اگه کسی میدونه این دو تا سوال رو واضح جواب بده . ممنون میشم .

white fox
سه شنبه 23 خرداد 1385, 12:49 عصر
همون روش اول عالی هست.اما میدونید چرا جواب نمیگرفتید؟؟؟
خیلی ساده..کد زیر رو:


Button1.Attributes.Add("Onclick", "return viewConfirm();")


شما باید در روال PageLoad خودتون مینوشتید..که شما به اشتباه در خود رویداد کلیک دکمه نوشتید برای همین اولین بار کار نمیکرده ولی دفعات بعدی چرا...
اصلاح کنید نیاز به کارهای بعدی هم ندارید

mehdi58
چهارشنبه 24 خرداد 1385, 08:12 صبح
white fox عزیز متشکرم

اما

جواب سوال دوم چی ؟؟؟؟؟؟؟؟؟؟؟

white fox
چهارشنبه 24 خرداد 1385, 21:46 عصر
ببخشید سوال دومتون رو ندیدم...
میدونید چون میخواین که با Confirm شدن یعنی جواب بله چه چیزی رو نشون بدید به کاربر بدون Refresh شدن صفحه به اعتقاد من از <DIV> به جای Panel آستفاده کنید...اینطوری تو قسمت جاوا اسکریپت بعد از Yes شدن میتونید اون تگ <div> رو خیلی راحت به کاربر نشون بدید بدون اینکه صفحه PostBack بشه..
امیدوارم متوجه منظورم شده باشید.