PDA

View Full Version : درج تکراری در بانک به ازای هر بار refresh



shahram176
جمعه 19 دی 1393, 17:59 عصر
سلام
من تو صفحم یه دکمه دارم که دستور insert را انجام میده اگه یه بار رو دکمه کلیک کنم و درج انجام بشه بعدا به ازای هر بار refresh صفحه یه بار درج انجام میشه؟
باید از دستور if(!ispostback) استفاده کنم؟

Mofid.m
شنبه 20 دی 1393, 10:03 صبح
میشه کد ها رو بزاری؟

keiv@n
شنبه 20 دی 1393, 19:45 عصر
سلام مشکل از رفرش کردن صفحه است اگه برای رفرش کردن صفحه از f5 یا ctrl + f5 استفاده می کنی رخداد های postback مثل(کلیک) انجام میشن

برای رفرش کردن بدون پست بک :

یه تگ لینک بزار تو صفحه و href شو برابر صفحه جاریت بزار : href="Default.aspx" بعد اگه رو لینک کلیک کنی صفحه بدون پست بک رفرش میشه ....

ینی به طور کلی برای رفرش کردن صفحه باید ریدایرکت کنی !

shahram176
شنبه 20 دی 1393, 21:17 عصر
خب شاید کاربر صفحه را رفرش کرد پس دوتا محصول تکراری درج میشه

keiv@n
یک شنبه 21 دی 1393, 01:34 صبح
سلام

از این روش استفاده کن :




protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());
}
}


protected void Button1_Click(object sender, EventArgs e)
{
if (Session["update"].ToString() == ViewState["update"].ToString())
{
//Insert In Database ;
Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString());
}
else
{
//هیچ کار نکن
}
}
void page_preRender()
{
ViewState["update"] = Session["update"];
}


اولین چیزی که باید بدونیم اینه که : رفرش موجب میشه تا عملیات صورت گرفته در مرحله قبل تکرار بشه یعنی اگر عملایت قبل پست بک نباشه و تازه وارد صفحه شده باشیم فشردن کلید f5 موجب رفرش شدن صفحه میشه (نه پست بک) ، اگر عملیات قبل پست بک باشه فشاردادن کلید f5 به هر تعداد موجب پست بک شدن مجدد صفحه میشه و ...

در کد بالا یه دستور شرط گذاشته : اگر عملیات جاری پست بک نبود آنگاه یه متغییر
Session["update"] = Server.UrlEncode(System.DateTime.Now.ToString()); بساز و مقدارشو یک عبارت یکتا قرار بده مثل ساعت حال حاضر ...

بعدش اومده داخل رخداد page_preRender مقدار session و ریخته داخل یه متغییر viewstate :


ViewState["update"] = Session["update"];

داخل رخداد کلیک button هم اومده یه شرط مقایسه برای session و viewstate گذاشته :

اگر درست بود یعنی کاربر کلیک انجام داده و پست بک شده پس عملیات درج داخل پایگاه داده رو انجام بده ...

خوب !

اگر کاربر دفعه اول کلیک انجام بده مقدار session و viewstate با هم برابر خواهند بود پس ()insert انجام خواهد شد واگر بعد از کلیک رفرش انجام بده تو این حالت مقدار متغییر viewstate مقدار جدید Session رو نمی گیره و مقدار قبلی session رو که ذخیره کرده بود load میکنه و دیگه با session جدید برابر نخواهد بود پس رخداد کلیک انجام نمیشه و ()insert هم نخواهیم داشت ...