PDA

View Full Version : راهنمایی کدنویسی Asynchronous برای login



raznahan
جمعه 14 تیر 1387, 22:28 عصر
من در صفحه اول سایتم ، یه گوشه، قسمت مربوط به Login کاربران رو قرار دادم (مثل همین سایت برنامه نویس) . میخوام وقتی که کاربر روی دکمه login کلیک کرد ، یک باکس به صورت Asynchronous(آجاکس) باز بشه و تا موقعی که اطلاعات از دیتا بیس و خونده میشه تا تشخیص بده کابر معتبر هست یا نه ، این باکس مثلا یه نوشته (...Loading information) یا مثلا یه عکس نمایش داده بشه و نهایتا نتیجه رو توی همون باکس نشون بده و تو این مدت بقیه سایت قابل دسترسی نباشه ، یعنی خاکستری بشه .

می خواستم منو راهنمایی کنید

اگه از ModalPopUpextender استفاده کنم چون وقتی TargetControlD رو دکمه login قرار میدم دیگه اون متدی که قرار بعد کلیک کردن login اجرا بشه و اطلاعات رو از دیتابیس بخونه ، اجرا نمیشه! و اینکه اگه از UpdateProgress استفاده کنم چطوری میشه یه چیزی مثل modal درست کرد ؟ آیا اون PopUpControlID رو که مثلا یه Panel که توش یه دکمه Ok و یه نوشته هست ،رو باید داخل updateProgress قرار بدم ؟ اگه قرار بدم چطوری همزمان اطلاعاتم رو از دیتا بیس بخونم ؟

با تشکر .

mehrdad201
یک شنبه 16 تیر 1387, 21:33 عصر
به نظر من شما باید بلافاصله قبل از اینکه استارت میزنی برای چک کردن با استفاده از اجرای یه تابع جاوا اسکریپتی صفحه رو به طور مودال در بیاری.....

بعد که کار چک کردن تموم شد دوباره یه تابع جاوا اسکریپتی رو کال کنی تا صفحه رو به طور اولش در بیاره.

فکر میکنم میتونی راحت از سمت سرور کدهای جاوا اسکریپت رو اجرا کنی.

raznahan
دوشنبه 17 تیر 1387, 07:27 صبح
ممنون از راهنمایی

ولی خب چطوری اینکار رو انجام بدم ؟ مثالی برای اینکار دارید ؟

و اینکه من اون حالتی رو که updateprogress به صفحه میده هم میخوام داشته باشم

چطوری وقتی کاربر دکمه ی signin رو زد اول یه کد جاوا Script اجرا بشه بعد بره تو یه تابع دیگه (server Side) که کاربر رو چک کنه ؟

به نظرتون کد نویسیش خیلی پیچیده میشه ؟

با تشکر .

raznahan
سه شنبه 18 تیر 1387, 06:44 صبح
آقا مهرداد میشه بیشتر راهنمایی کنید...

amirjalili
سه شنبه 18 تیر 1387, 09:36 صبح
سلام دوست عزیز..
شما باید در اجاکس قبل از اینکه onReadyStateChange برابر 4 بشه در اون قسمتی که میخوای Loading بیاد با متد innerHTML اون loading رو در اون قسمت که مثلا یک div هست قرار بدی..

raznahan
سه شنبه 18 تیر 1387, 09:44 صبح
میشه لطف کنید یه تیکه کد مثال بزنید ؟
چطوری صفحه رو خاکستری و Disable کنم؟

با تشکر .

raznahan
سه شنبه 18 تیر 1387, 22:35 عصر
آقای راد میشه شما هم یه کمکی به ما بکنید ؟

ممنون میشم .

raznahan
چهارشنبه 19 تیر 1387, 17:31 عصر
با سلام دوباره ... راه حل پیدا شد :لبخند:

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

به این صورت که ما باید خاصیت TargetConrolId رو یه کنترل (مثلا یه button یا هر چیزه دیگه ای )

قرار بدیم و Visible اون کنترول رو False کنیم یا با Css ، مقدار Style رو Style="display:none قرار بدیم که کنترول نمایش داده نشه (این کنترل کاربرد خاصی نداره) ما اینکار رو میکنیم چون TargetControlID حتما باید یه مقداری داشته باشه وگرنه خطا میده
حالا کار ما راحت شد! کافیه وقتی کاربر روی دکمه ی login کلیک کرد اول یه تابع جاوا اسکریپت اجرا بشه که توی اون ModalPopUpExtender رو نمایش بده و سپس تابع Server-Side ما اجرا بشه که هویت کاربر رو چک کنه. حال برای اینکه بتونیم به ModalPopUpExtender توی client -side (جاوا اسکریپت ) دسترسی داشته باشیم باید برای خاصیت BehaviorID کنترول مدال رو یه مقداری به عنوان ID تعریف کنیم که توی جاوا اسکریپت با این ID سرو کار داشته باشیم .
اینم کد کاملش :

<form id="form1" runat="server">
<div>
<asp:ScriptManager runat="Server" ID="ScriptManager1" />
<script type="text/javascript">
function showPopup() {
document.getElementById('messagediv').innerText='L oading...';
document.getElementById('Button1').style.display=' none';
var modalPopupBehavior = $find('programmaticModalPopupBehavior');

modalPopupBehavior.show();
}
function hidepopup()
{
var modalPopupBehavior = $find('programmaticModalPopupBehavior');
modalPopupBehavior.hide();
}
</script>


<asp:TextBox ID="TextBox1" runat="server"></asp:TextBox><br />
<asp:TextBox ID="TextBox2" runat="server"></asp:TextBox><br />

<asp:Button ID="loginButton" runat="server" Text="login" OnClientClick="showPopup()"
onclick="loginButton_Click" /><br />

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Panel ID="Panel1" Visible="false" runat="server">
You has been Authenticated.
This is the content displaying after authentication.</asp:Panel>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="loginButton" EventName="Click"/>
</Triggers>
</asp:UpdatePanel>

<br />


<asp:Button runat="server" ID="hiddenTargetControlForModalPopup" style="display:none"/>
<cc1:ModalPopupExtender runat="server" ID="programmaticModalPopup"
BehaviorID="programmaticModalPopupBehavior"
TargetControlID="hiddenTargetControlForModalPopup"
PopupControlID="programmaticPopup"
BackgroundCssClass="modalBackground"
DropShadow="True"
RepositionMode="RepositionOnWindowScroll" >
</cc1:ModalPopupExtender>

<asp:Panel runat="server" ID="programmaticPopup" style="background-color:Window;display:none;height:125px;width:225px ;padding:10px">
<div id='messagediv' style="text-align:center">Loading...</div>

<input id="Button1" type="button" value="OK" style="display:none" onclick="hidepopup()" />
</asp:Panel>
</div>

</form


اینم کد Server -Side :


protected void loginButton_Click(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(2000); //for testing (DataBase Connection Codes)
string mess;
if (TextBox1.Text != "user1") //Check the username and password.
mess = "wrong information";
else
{
mess = "Ok,true information...";
Panel1.Visible = true; // Show the content after logged in.
}
ScriptManager.RegisterStartupScript(Page, this.GetType(), "script", "document.getElementById('Button1').style.display=' block';", true);
ScriptManager.RegisterStartupScript(Page, this.GetType(), "message", "document.getElementById('messagediv').innerText='" + mess + "';", true);

{


اگه سوالی پیش اومد بپرسین :چشمک:



با اینکه ما رو زیاد تحویل نگرفتید ولی بازم از دوستانی که منو راهنمایی کردن خیلی ممنونم:لبخندساده: