PDA

View Full Version : سوال: پاک نشدن اطلاعات textbox هنگام upload تصویر



r_khan
یک شنبه 24 بهمن 1389, 13:02 عصر
باسلام
برنامه من یه فرم داره که از تعدادی textbox و یه FileUpload دارم وقتی تصویری upload می کنم صفحه از دوباره load میشه همین امر باعث میشه اطلاعات textbox حذف میشه چکار کنم اطلاعات textbox پاک نشه؟؟

r_khan
یک شنبه 24 بهمن 1389, 16:06 عصر
ایا از postback میشه استفاده کرد؟ چطور استفاده کنم؟

Javad_Darvish_Amiry
یک شنبه 24 بهمن 1389, 16:18 عصر
سلام خسته نباشید. آیا viewstate رو برای textbox فالس نکردید؟ ممکنه فالس باشن. ممکنه تو پیج لود، یا یه متود دیگه ای تکست باکس ها رو دارید خالی میکنید. سوالتون خیلی کلی هست. اگه ممکنه کد رو قرار بدید. موفق باشید.

r_khan
یک شنبه 24 بهمن 1389, 16:37 عصر
سلام خسته نباشید. آیا viewstate رو برای textbox فالس نکردید؟ ممکنه فالس باشن. ممکنه تو پیج لود، یا یه متود دیگه ای تکست باکس ها رو دارید خالی میکنید. سوالتون خیلی کلی هست. اگه ممکنه کد رو قرار بدید. موفق باشید.

من از textbox سمت httml استفاده می کنم اصلا viewstate نداره پیج لود، یا یه متود دیگه ای تکست باکس ها رو خالی نمی کنم !!

cjNet
یک شنبه 24 بهمن 1389, 16:39 عصر
سلام .

می تونید TextBox هاتون رو داخل کنترل UpdatePanel قرار بدید که دوباره لود نشن .

کنترل FileUpload و اون دکمه ای که عملیات رو انجام میده رو حتما بیرون UpdatePanel قرار بدید تا عملیات آپلود با موفقیت انجام بشه ....

@@@ البته کنترل های جدیدی هم اومدن که دیگه این مشکل UpdatePanel رو ندارند @@@

r_khan
یک شنبه 24 بهمن 1389, 16:49 عصر
سلام .

می تونید TextBox هاتون رو داخل کنترل UpdatePanel قرار بدید که دوباره لود نشن .

کنترل FileUpload و اون دکمه ای که عملیات رو انجام میده رو حتما بیرون UpdatePanel قرار بدید تا عملیات آپلود با موفقیت انجام بشه ....

@@@ البته کنترل های جدیدی هم اومدن که دیگه این مشکل UpdatePanel رو ندارند @@@

بازم پاک میشند:گریه::متعجب:

Javad_Darvish_Amiry
یک شنبه 24 بهمن 1389, 16:50 عصر
خوب دوست من، اصلا viewstate به خاطر stateless بودن http به وجود اومده. تا مشکلی مثل مشکل شما حل بشه. وقتی از تگ های html استفاده میکنید، از این امکان محروم میشید. یه راهش اینه که مقدار تگها رو سمت سرور بخونید، و وقتی دوباره داره به کلاینت ارسال میشه، باز توشون بنویسید.

r_khan
یک شنبه 24 بهمن 1389, 20:56 عصر
اینکار را کردم درست شد اما دیگر نمی توانم در سمت کلاینت به textbox ها دسترسی داشته باشم! ؟ چه کنم که به textbox ها دسترسی داشته باشم؟

Javad_Darvish_Amiry
یک شنبه 24 بهمن 1389, 22:42 عصر
اینکار را کردم
کدوم کار رو؟؟؟!!! اگه بهشون صفت runat=server رو اضافه کردید، خوب طبیعیه که آی دی که بهشون اختصاص دادید، موقع رندر شدن عوض میشه، یه راه اینه که آی دی رندر شده رو بخونید و سمت کلاینت باهاشون کار کنید که قبلا تو همین تالار بحث شده و ازش میگذریم. یه راه دیگه (که بهینه تر و کم هزینه تر هست) اینکه مقادیر رو سمت کد-بیهایند که میخونید، هر کدوم رو بریزید تو یه فیلد یا پراپرتی که سطح دستریش حداقل پروتکتد باشه، و سمت کد مارک اپ، با سی شارپ مقدار رو بخونید. موفق باشید.

aserfg
دوشنبه 25 بهمن 1389, 07:33 صبح
با سلام خدمت دوستان عزیز ،

اما دیگر نمی توانم در سمت کلاینت به textbox ها دسترسی داشته باشم!
در تابع جاوا اسکریپت document.getElementById(); فرقی نمی کنه کنترل شما چی باشه .

r_khan
دوشنبه 25 بهمن 1389, 09:53 صبح
کدوم کار رو؟؟؟!!! اگه بهشون صفت runat=server رو اضافه کردید، خوب طبیعیه که آی دی که بهشون اختصاص دادید، موقع رندر شدن عوض میشه، یه راه اینه که آی دی رندر شده رو بخونید و سمت کلاینت باهاشون کار کنید که قبلا تو همین تالار بحث شده و ازش میگذریم. یه راه دیگه (که بهینه تر و کم هزینه تر هست) اینکه مقادیر رو سمت کد-بیهایند که میخونید، هر کدوم رو بریزید تو یه فیلد یا پراپرتی که سطح دستریش حداقل پروتکتد باشه، و سمت کد مارک اپ، با سی شارپ مقدار رو بخونید. موفق باشید.

این راه هایی که گفتید میشه مثال بزنید :خجالت: من تازه کارم

Javad_Darvish_Amiry
دوشنبه 25 بهمن 1389, 14:37 عصر
سلام. چشم حتما. فرض کنید یه تگ ورودی متن تو صفحه امون داریم. به شکل زیر:


<input type="text" id="UserName" name="UserName" value="" />

خوب تو مرحله اول این تگ رو باید به شکل زیر تغییر بدیم تا مقدارش رو بتونیم داینامیک و توی ران-تایم تعیین کنیم:


<input type="text" id="UserName" name="UserName" value='<%= base.MyUserName %>' />

کار مارک-آپ تموم شد. حالا باید بریم کد-بیهایند و کد سی شارپ (یا بسته به زبونمون هر زبون دیگه ای که پروژه رو باهاش می نویسیم) رو بنویسیم. تو قسمت کد، اول یه فیلد تعریف می کنیم به اسم مثلا MyUserName و اونو پروتکتد قرار میدیم تا از قسمت مارک-آپ در دسترس باشه. مقدار پیش فرض رو هم برابر رشته خالی قرار میدیم تا چیزی تو تگ مورد نظر ننویسه. به این شکل:

protected string MyUserName = "";
یادمون باشه، این تیکه کد یه فیلد تعریف میکنه و نباید داخل متود ها (مثلا توی پیج-لود) باشه. بلکه باید قسمتی از بدنه خود کلاس کد-بیهایند باشه. حالا توی پیج-لود میایم چک میکنیم که اگه صفحه پست-بک شده بود، یعنی از سمت کلاینت سابمیت صورت گرفته بود، در این صورت حتما توی تکست باکس مربوطه مقداری ثبت شده بود (طبق مثال شما) و من حالا باید از گم شدن مقدار مربوطه جلوگیری کنم. کافیه در صورت پست-بک شدن صفحه، مقدار رو بخونم و به فیلدی که بالا تعریف کردم نسبتش بدم. چون کدی که تو کد-بیهایند نوشتیم، قبل از کد مارک-آپ اجرا میشه (دلیلش اینه که مارک-آپ از کد-بیهایند ارث برده شده و طبق قوانین ارث بری، کلاس والد و متود هاش قبل از کلاس فرزند اجرا میشه) پس اول مقدار به فیلد نسبت داده میشه؛ بقیه کارها انجام میشه؛ نوبت میرسه به کد مارک-آپ. تو مارک-آپ هم وقتی داره رندر میشه و وقتی به تگ مورد نظر ما رسید، صفت value رو با فیلد مورد نظر ما مقدار میده. اگه هم صفحه بدون پست-بک اجرا شده باشه (مثلا درخواست اول) در این صورت هم چون مقدار پیش فرضی که برای فیلد مورد نظر تعیین کردیم رشته خالی هست، پس توی value چیزی نوشته نمیشه و تکست باکس خالی میمونه. کد پیج-لود به این صورت هست:


if(this.Page.IsPostBack){
this.MyUserName = this.Page.Request.Form["UserName"];
}

موفق باشید.