PDA

View Full Version : ارسال اطلاعات به دیتابیس بدون رفرش صفحه با استفاده کنترل LinkButton



powerdangerouseb
دوشنبه 22 دی 1393, 01:51 صبح
درود به همگی
دوستان من دارم یک ماژول(برای نمونه این ماژول شبیه ارسال پست(status) در ف.یس.بوک است ) طراحی می کنم که می خواهم هر کسی که بر روی دکمه ی LinkButton( که مثلا لایک کردن است ) کلیک کند یک عدد به تعداد لایک زدن ها اضافه شه .

ماژول تمام شوده ولی مشکل من اینه که نمی خوام هنگامی که کسی بر روی دکمه ی LinkButton کلیک کنه صفحه رفرش بخوره
برای نمونه می خوام یک چیزی مثل لایک کردن پست در ف.یس.بوک باشه که هنگامی که لایک می کنن پیج رقرش نخوره و اطلاعات هم ثبت شه در دیتابیس



ممنون می شم کمکم کنید


با سپاس

LostOfMind
دوشنبه 22 دی 1393, 10:01 صبح
درباره ajax تحقیق کنید

powerdangerouseb
دوشنبه 22 دی 1393, 13:21 عصر
درود
ممنون از پاسخ ولی خودم قبلا در برای ajax تحقیق کردم چون می دونم با ajax می شه این کارو کرد
ولی ajax خیلی مبحث بزرگی است و اگر بخواهم برای این پیدا کردن این مشکل کوچک وقت بزارم کلی از وقتم می رود .
توی اینترنت هم خیلی گشتم و نتونستم درست کنم .

من تمام کار های cms تمام شوده به جز این مشکل
:نمی خوام هنگامی که کسی بر روی دکمه ی LinkButton کلیک کنه صفحه رفرش بخوره
برای نمونه می خوام یک چیزی مثل لایک کردن پست در ف.یس.بوک باشه که هنگامی که لایک می کنن پیج رقرش نخوره و اطلاعات هم ثبت شه در دیتابیس



ممنون می شم اگر کسی اطلاعاتی داره کمکم کنه که این کارو رو انجام دهم


با سپاس از شما دوستان

sadegh.te
دوشنبه 22 دی 1393, 13:46 عصر
سلام دوست عزیز اینو دانلود کن ببین همون چیزیه که میخوایی؟
اگه درستش کردی اون قسمت لایک خوردن رو واسه من بزار.
http://s4.picofile.com/file/8163324118/InsertDatainSQLUsingjQuery.zip.html

ahmad156
دوشنبه 22 دی 1393, 18:27 عصر
ولی ajax خیلی مبحث بزرگی است و اگر بخواهم برای این پیدا کردن این مشکل کوچک وقت بزارم کلی از وقتم می رود .

دوست عزیز کاری که شما قصد انجام اون رو دارین میشه بحث Ajax.این نیست که شما نخواین این کار رو با Ajax انجام بدین مگر اینکه تکنولوژی جدیدی اختراع کنین:لبخندساده:
در هر صورت، شما یا از UpdatePanel یا از JavaScript باید استفاده کنین.در ضمن LinkButton همون Button هست که Style متفاوتی داره

keiv@n
دوشنبه 22 دی 1393, 18:34 عصر
تکنولوژی جدیدی اختراع کنین و خوب اومدی :قهقهه::قهقهه::قهقهه::قهقهه:

لایک

powerdangerouseb
دوشنبه 22 دی 1393, 19:23 عصر
دوست عزیز کاری که شما قصد انجام اون رو دارین میشه بحث Ajax.این نیست که شما نخواین این کار رو با Ajax انجام بدین مگر اینکه تکنولوژی جدیدی اختراع کنین:لبخندساده:
در هر صورت، شما یا از UpdatePanel یا از JavaScript باید استفاده کنین.در ضمن LinkButton همون Button هست که Style متفاوتی داره



دوست گرامی اول سپاس بایت راهنمایی
دوم : من نگفتم که نمی خوام با ajax انجامش بدم (تو همون پست 3 گفتم می دونم می شه با ajax انجام داد ولی نمی دانم چه طوری ؟!!!؟)
اینجانب فقط گفتم من برای این مشکل کوچیک اگر بخوام برم کل ajax رو یاد بگیرم خیلی وقت گیر است .

ممنون می شم اگر کسی اطلاعاتی داره کمکم کنه که این کارو رو انجام دهم
از دیروز دارم می گردم ولی چیزی که می خوام رو هنوز پیدا نکردم

sadegh.te
دوشنبه 22 دی 1393, 19:44 عصر
اون فایلی که من تو پست 4 گذاشتم دقیقا همون کاری رو میکنه که شما میخوایین. مشکلتون چیه دیگه؟:ناراحت:

powerdangerouseb
دوشنبه 22 دی 1393, 20:03 عصر
اون فایلی که من تو پست 4 گذاشتم دقیقا همون کاری رو میکنه که شما میخوایین. مشکلتون چیه دیگه؟:ناراحت:


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

مشخصات جدول این بود

name NVARCHAR(50)
Email nvarchar(80)

ولی 2به 2 مشکل بر خورد کردم

1 : هیچ اطلاعاتی ثبت نمی شود
2 : موقعی که بر روی دکمه button کلیک می کنم صفحه رفرش می شود (چون من نمی خوام اصلا صفجه رفرش بخوره )



حال اگر می دانید که چه طوری این دو ایراد را حل کنم
ممنون می شم راهنماییم کنید

با سپاس

ahmad156
دوشنبه 22 دی 1393, 21:17 عصر
دوست عزیز بحث Ajax هر چقدر هم مفصل و زیاد باشه برای یه برنامه نویس وب از نون شب هم واجب تره.اگر میخواین سریع کارتون بشه خب از UpdatePanel استفاده کنین!

powerdangerouseb
سه شنبه 23 دی 1393, 08:03 صبح
دوست عزیز بحث Ajax هر چقدر هم مفصل و زیاد باشه برای یه برنامه نویس وب از نون شب هم واجب تره.اگر میخواین سریع کارتون بشه خب از UpdatePanel استفاده کنین!

ممنون از پاسخ دوست گرامی

بله می شه از UpdatePanel استفاده کرد ولی من حتی اونجا هم به ایراد خوردم چون این linkbutton من تو یک گرید ویو است
حتی در کد هم findcontrol کردم ولی مشکلش این بود که اصلا دیگه هر چی کلیک می کردم کاری نمی کرد

به error خوردم که می گفت value ی linkbutton ام خالی است
کدش رو برایتان می گذارم ممنون می شم راهنماییم کنید

کد پایین کدی است که من UpdatePanel را در گیرید ویو استفاده کردم





</asp:ScriptManager>
<asp:GridView ID="ShowData" runat="server" AutoGenerateColumns="False"
BorderStyle="None" GridLines="None" onrowdatabound="ShowData_RowDataBound">
<Columns>
<asp:TemplateField>
<ItemTemplate>
<table align="center" style="font-family:Tahoma; width:699px; font-size:8pt; direction:rtl; text-align:right; background-color:#E0E0E0; border-radius: 10px;">
<tr>
<td colspan="2" style="padding:10px;">
<b><%#Eval("Added_By")%> </b>
</td>
</tr>
<tr>
<td style="vertical-align:top; width:50px;">

</td>
<td >
<br />




<asp:Label ID="LblMososID" runat="server" Visible="false" Text='<%# Eval("ProductID") %>'></asp:Label>
<asp:Repeater DataSourceID="SQLDSSubset" ID="ShowTitle" runat="server">
<ItemTemplate>
<%#Eval("Tozihat") %>
</ItemTemplate>
</asp:Repeater>




<asp:SqlDataSource ID="SQLDSSubset" runat="server" ConnectionString="<%$ ConnectionStrings:PersepolisCMS_ShopConnectionStri ng %>"
SelectCommand="select SUBSTRING(Tozihat,0,500)as 'Tozihat' ,ProductID from dbo.PersepolisCMS_Table_Products_Seller WHERE Status_Deleted = 0 and (ProductID = @ProductID) ">
<SelectParameters>
<asp:ControlParameter ControlID="LblMososID" Name="ProductID" PropertyName="Text" />
</SelectParameters>
</asp:SqlDataSource>









&nbsp;&nbsp;&nbsp;<a href="#">بیشتر</a>
<br /> <br />
<div style="text-align:center;">
<asp:Image ID="ImgBanner" runat="server" ImageUrl='<%#Eval("SmallImage") %>' Width="580px" Height="350px" />
</div>
</td>
</tr>
<tr>
<td>

<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton ID="LinkButton1" runat="server" Text="Like" onclick="LinkButton1_Click"></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>
</td>
</tr>
</table>
</ItemTemplate>
</asp:TemplateField>
</Columns>
</asp:GridView>






کد پایین برای پیج .cs است




protected void LinkButton1_Click(object sender, EventArgs e)
{
//foreach (GridViewRow row in ShowData.Rows)
//{
// LabelText2 = ((LinkButton)row.FindControl("LinkButton1")).Text;
// Response.Write(LabelText);
//}


Label lbl = new Label();
lbl = (Label)ShowData.FindControl("LblMososID");


LinkButton Like = new LinkButton();
Like = (LinkButton)ShowData.FindControl("LinkButton1");





//Like.Text = "like";


if (Like.Text == "Like")
{

//SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["CmsMySelfConnectionString"].ConnectionString);
//SqlCommand command = new SqlCommand("PersepolisCMS_SP_Link_Products_For_Seller", con);
//command.CommandType = CommandType.StoredProcedure;
////command.Parameters.Add("@ID_Post", SqlDbType.NVarChar).SqlValue = Page.RouteData.Values["PostID"] as string;
//command.Parameters.Add("@ID_Post", SqlDbType.NVarChar).SqlValue = lbl.Text;




//con.Open();
//int ok = command.ExecuteNonQuery();
//con.Close();
Like.Text = "UnLike";
}
else if (Like.Text == "UnLike")
{






Like.Text = "Like";


}






هر کاری کردم هیچ جایی نرسیدم

سپاسگذار می شم کمکم کنید با سپاس

LostOfMind
سه شنبه 23 دی 1393, 14:25 عصر
دوست عزیز اگر بعد از قرار دادن updatepanel دکمه کار نکرد مسلما جایی خطایی رخ داده.چون محل خطا داخل updatepanel است خطا نمایش داده نمیشود
اول مشخص کن کلیک مربوطه مربوط به کدام سطر از گریدویو است:

<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton>
بعد در رویداد کلیک کد زیر رو قرار بده:

LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);
Label LblMososID= (Label)GridView1.Rows[i].FindControl("LblMososID");

بعد عمل مورد نظر رو انجام بده

powerdangerouseb
سه شنبه 23 دی 1393, 20:48 عصر
دوست عزیز اگر بعد از قرار دادن updatepanel دکمه کار نکرد مسلما جایی خطایی رخ داده.چون محل خطا داخل updatepanel است خطا نمایش داده نمیشود
اول مشخص کن کلیک مربوطه مربوط به کدام سطر از گریدویو است:

<asp:LinkButton ID="LinkButton1" runat="server" CommandArgument="<%# Container.DataItemIndex %>"></asp:LinkButton>
بعد در رویداد کلیک کد زیر رو قرار بده:

LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);
Label LblMososID= (Label)GridView1.Rows[i].FindControl("LblMososID");

بعد عمل مورد نظر رو انجام بده




دوست گرامی LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind) ممنون بابت راهنمایتان
کد شما را استفاده کردم ولی شوربختانه به مشکل برخوردم دوباره
در واقغ من زیاد حرفه ای نیستم و بار اولم است که با CommandArgument برای کنترلی کار می کنم
ممنون می شوم کمکم کنید که این مشکل هم حل کنم


در واقع این linkbuttom من که در updatepanel است text اش like است (همان طور که در کد پایین مشاهده می کنید )


<asp:LinkButton ID="LinkButton1" Text="Like" runat="server" onclick="LinkButton1_Click"></asp:LinkButton>



و من کدی نوشتم که هنگامی که کلیک شد text اش تبدیل به Unlike بشه (مثل لایک کردن پستی در فی.سبو.ک)
من کد زیر را نوشتم براش نوشتن (و باید بگم که اگر در گیرید ویو نذارمش به درستی بدون رفرش صفحه کار می کنه و اطلاعاتم هم را ثبت می کنه)



if (LblMososID.Text == "Like")
{
LblMososID.Text = "UnLike";
}
else if (LblMososID.Text == "UnLike")
{
LblMososID.Text = "Like";
}



ولی پس از این که کد شما را قرار دادم به ایراد زیر بر خوردم

127542

حال باید چه کار کنم و چی باید در قسمت CommandArgument قرار بدهم ؟؟؟
بسیار سپاسزگذار می شوم راهنماییم کنید
چون واقعا نمی دونم چی کار باید بکنم



سپاس

LostOfMind
سه شنبه 23 دی 1393, 21:15 عصر
قسمت CommandName=like بذار
بعد روی linkbutton دابل کلیک کن کد زیر رو بنویس:

LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);

LinkButton LblMososID= (LinkButton)GridView1.Rows[i].FindControl("LblMososID");



if (LblMososID.CommandName== "Like")

{
LblMososID.Text = "UnLike";
LblMososID.CommandName="UnLike";

}
else if (LblMososID.CommandName == "UnLike")

{
LblMososID.Text = "Like";
LblMososID.CommandName="Like";

}




کد رویداد رو کامل بذار ببینم

powerdangerouseb
سه شنبه 23 دی 1393, 22:06 عصر
قسمت CommandName=like بذار
بعد روی linkbutton دابل کلیک کن کد زیر رو بنویس:

LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);

LinkButton LblMososID= (LinkButton)GridView1.Rows[i].FindControl("LblMososID");



if (LblMososID.CommandName== "Like")

{
LblMososID.Text = "UnLike";
LblMososID.CommandName="UnLike";

}
else if (LblMososID.CommandName == "UnLike")

{
LblMososID.Text = "Like";
LblMososID.CommandName="Like";

}




کد رویداد رو کامل بذار ببینم



درود مجدد دوست گرامی
قدم به قدم طبق فرمایش شما جلو رفتم
ولی به مشکل زیر برخورد کردم

127544


کد linkbutton



<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:LinkButton CommandArgument='<%# Container.DataItemIndex %>' ID="LinkButton1"
runat="server" onclick="LinkButton1_Click" CommandName="like" ></asp:LinkButton>
</ContentTemplate>
</asp:UpdatePanel>


و یک پرسش دیگر این که ID ی linkbutton من LinkButton1 است پس چرا باید LblMososID (که نام یکی از lable ها در گیرید ویو است) را بگذارم ؟؟؟ مگه نباید برای پیدا کردن linkbutton از خود id ی linkbutton استفاده کرد ؟؟؟؟؟؟
منظورم کد پایینه


LinkButton LblMososID= (LinkButton)GridView1.Rows[i].FindControl("LblMososID");





این هم از کد برای دابل کلیک کردن Linkbutton


protected void LinkButton1_Click(object sender, EventArgs e)
{
LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);


LinkButton LblMososID = (LinkButton)ShowData.Rows[i].FindControl("LinkButton1");






if (LblMososID.CommandName == "Like")
{
LblMososID.Text = "UnLike";
LblMososID.CommandName = "UnLike";


}
else if (LblMososID.CommandName == "UnLike")
{
LblMososID.Text = "Like";
LblMososID.CommandName = "Like";


}
}



اگر چیز دیگری هم هست که لازم دارید برای دیدن بفرمایید تا من تقدیم کنم
حال باید چه کار کنم ؟؟




سپاس بابت راهنمایی ها دوست گرامی

LostOfMind
چهارشنبه 24 دی 1393, 09:44 صبح
دوست عزیز من که از کد شما خبر ندارم
رهنمایی من کلی بود شما باید تغییرات رو با توجه به کد خودتون انجام بدید
فایل رو ضمیمه کنید ببینم کجا اشتباه شده

LostOfMind
چهارشنبه 24 دی 1393, 10:00 صبح
این فایل رو ضمیمه کردم تست کن127552

powerdangerouseb
چهارشنبه 24 دی 1393, 13:44 عصر
این فایل رو ضمیمه کردم تست کن127552


درود دوست گرامی LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind)
سپاسگذارم بایت کمک بزرگی که کردید که کردین
این دقیقا چیزی است که می خواستم (خدا خیرتون بده )



و پرسش اخر این که در همان گیرید ویو یک lable است به نام LblMososID که ID هر کدام از پست ها را درون خودش دخیره می کنه
من از کد پایینی برای صدا کردم lable اسفاده کردم




Label GetID = new Label();
GetID = (Label)ShowData.FindControl("LblMososID");





ولی موقعی که ازش استفاده می کنم مقدار null بر می گردونه ؟؟
علت این چیست ؟؟؟؟

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


با سپاس از شما

LostOfMind
چهارشنبه 24 دی 1393, 16:29 عصر
درود دوست گرامی LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind)
سپاسگذارم بایت کمک بزرگی که کردید که کردین
این دقیقا چیزی است که می خواستم (خدا خیرتون بده )



و پرسش اخر این که در همان گیرید ویو یک lable است به نام LblMososID که ID هر کدام از پست ها را درون خودش دخیره می کنه
من از کد پایینی برای صدا کردم lable اسفاده کردم




Label GetID = new Label();
GetID = (Label)ShowData.FindControl("LblMososID");





ولی موقعی که ازش استفاده می کنم مقدار null بر می گردونه ؟؟
علت این چیست ؟؟؟؟

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


با سپاس از شما

اگر کنترل Lebel داخل همون گرید ویو هستش می تونید مانند کنترل LinkButton صداش کنید
یعنی
Label LblMososID= (Label)ShowData.Rows[i].FindControl("LblMososID");

روش استفاده شده توسط شما اشتباست

powerdangerouseb
پنج شنبه 25 دی 1393, 03:21 صبح
اگر کنترل Lebel داخل همون گرید ویو هستش می تونید مانند کنترل LinkButton صداش کنید
یعنی
Label LblMososID= (Label)ShowData.Rows[i].FindControl("LblMososID");

روش استفاده شده توسط شما اشتباست



درود
واقعا سپاس گذارم از شما دوست گرامی LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind) oخدا خیرتان بده
کارم انجام شد , یک گیتی سپاس
ولی روش ام را عوض کردم و از همان کنترل linkbutton استفاده کردم و کارم انجام شد به جای label چون به ایرادی بر خورد کردم


به هر حال ممنون

powerdangerouseb
جمعه 26 دی 1393, 06:10 صبح
اگر کنترل Lebel داخل همون گرید ویو هستش می تونید مانند کنترل LinkButton صداش کنید
یعنی
Label LblMososID= (Label)ShowData.Rows[i].FindControl("LblMososID");

روش استفاده شده توسط شما اشتباست



با درود مجدد دوست گرامی LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind)

ببخشید ولی یک پرسش و ایراد دیگر
مشکل های پیشین به لطف شما درست شد
ولی الان موقعی که کسی پستی را like می زند به unlike تغییر می کند , ولی اگر صفجه به هر دلیلی بسته شود و دوباره ان فردی که پست مورد نظر را لایک زده باشد بیاید دوباره همان پوستی که like کرده بوده دوباره می تواند لایک کند .(دیگر unlike نیست )

من برای این کار کد شما را نوشتم که وار کرده بود که مقدار likebutton را می گرفتم و ....

ولی من این کد را در قسمت Page_Load قرار دادم چون می خواهم هنگامی که کاربر مورد نظر وارد سایت میشود اگر پستی را لایک زده باشد ان پست ها linkbutton شان به unlike تبدیل شود .
کدی که من در Page_Load استفاده کردم






protected void Page_Load(object sender, EventArgs e)
{
System.Threading.Thread.Sleep(1000);
LinkButton m = (LinkButton)sender;
int i = Int32.Parse(m.CommandArgument);
LinkButton LblMososID = (LinkButton)ShowData.Rows[i].FindControl("LinkButton1");


SqlConnection con = new SqlConnection(ConfigurationManager.ConnectionStrin gs["PersepolisCMS_ShopConnectionString"].ConnectionString);
SqlCommand command = new SqlCommand("PersepolisCMS_SP_ShowGetID3", con);
command.CommandType = CommandType.StoredProcedure;
command.Parameters.Add("@Username", SqlDbType.NVarChar).SqlValue = GetUsername.UserName;
command.Parameters.Add("@Product_ID", SqlDbType.NVarChar).SqlValue = LblMososID.Text;
con.Open();
SqlDataReader dr = command.ExecuteReader();
if (dr.Read())
{
GET = dr["Product_ID"].ToString();
if (GetProductID == GET)
{
LblMososID.Text = "UnLike";
LblMososID.CommandName = "UnLike";
}
else
{
LblMososID.Text = "Like";
LblMososID.CommandName = "Like";
}



}
con.Close();


}


و پس از لود شدن به ایراد زیر بر می خورم


127592



حال ایراد من حقیر کجاست


ممنون می شوم بازم راهنماییم کنید


با سپاس

powerdangerouseb
شنبه 27 دی 1393, 06:49 صبح
درود
دوستان کسی نیست واقعا این مشکل منو بگه
از بس تو اینترنت گشتم برای حل کردن ایراد خسته شدم
ممنون می شم اگر کسی مرا راهنمایی کند



با سپاس

LostOfMind
شنبه 27 دی 1393, 11:46 صبح
سلام
این کد در page_load کار نمیکنه
باید در رویداد RowDataBound گرید ویو کد زیر رو بنویسی

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (row.DataItem == null)
return;
LinkButton LblMososID = (LinkButton)row.FindControl("LblMososID");
و ادامه ی کار مشابه خواهد بود...

powerdangerouseb
یک شنبه 28 دی 1393, 06:20 صبح
سلام
این کد در page_load کار نمیکنه
باید در رویداد RowDataBound گرید ویو کد زیر رو بنویسی

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)
{
GridViewRow row = e.Row;
if (row.DataItem == null)
return;
LinkButton LblMososID = (LinkButton)row.FindControl("LblMososID");
و ادامه ی کار مشابه خواهد بود...



درود LostOfMind (http://barnamenevis.org/member.php?283292-LostOfMind)
ممنون دوست گرامی با لطف و کمک شما درست شد


سپاسگذارم

amir_T_2008
یک شنبه 28 دی 1393, 06:59 صبح
دوست عزیز
powerdangerouseb (http://barnamenevis.org/member.php?208782-powerdangerouseb)

http://barnamenevis.org/images/statusicon/user-offline.png اگر ممکنه یه نسخه هم برای بچه ها قرار بدید که کسایی که این مشکل دارن استفاده کنن