PDA

View Full Version : سوال: تایمرم تو یک updatepanel که update میشه updatepanel دوم هم update میکنه؟؟؟؟؟



hgh.just.hony
شنبه 30 دی 1391, 11:35 صبح
سلام
من یه اپدیت دارم که توش یه تایمر هست که تعداد و قیمت کل بلیت هایی که کاربر خریداری کرده را هر 6 ثانیه یه بار چک می کنه
و یه صفحه دارم که یه updatepanel داره که صفحاتم بعضی هاشون به شکل یوزر کنترل هستن و یا با iframe بعضی دیگه رو لود می کنم
مشکلم اینه که با اپدیت شدم updatepanel اولی که تایمر داره updatepanel دومی که مخصوص لود صفحاتمه هم رفرش میشه و اگه کاربر در حال مشاهده سایر بلیط ها باشه و 2 ثانیه قبلش یه بلیط جدید به سبد خریدش اضاف کرده بوده وسط کار که داره بلیط های دیگه رو میبینه صفحم رفرش شده و یه صفحه اول میره
(مسترم کلا هیچ رفرشی نداره و همه صفحات تو همون صفحه اصلیم لود میشه)
اینم کدهام :
1----------------------------- یوزرکنترل سبد خرید :


<%@ Control Language="C#" AutoEventWireup="true" CodeFile="Basket.ascx.cs" Inherits="Basket" %>
<asp:Timer ID="Timer1" runat="server" ontick="Timer1_Tick" ></asp:Timer>
<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<table border="0" style="background-image:url('images/content_bg.png');background-repeat:no-repeat;
font:10pt tahoma;color:Black; width: 129px;">
<tr>
<td style="text-align:center" >
<strong> <span style="font-size: 10pt; font-family: Tahoma; color: #333333;">سبد خرید</span></strong>

</td>
</tr>
<tr>
<td align="right">
<asp:Panel ID="Panel2" runat="server" Width="148px">
<span style="font-size: 9pt; font-family: Tahoma">&nbsp;تعداد </span>
<asp:Label ID="Label1" runat="server" Font-Names="tahoma" Font-Size="X-Small">0</asp:Label><span
style="font-size: 9pt; font-family: Tahoma">&nbsp; بلیط</span><br />
<span style="font-size: 9pt; font-family: Tahoma">
معادل </span>
<asp:Label ID="Label2" runat="server" Font-Names="Tahoma" Font-Size="X-Small">0</asp:Label><span
style="font-size: 9pt; font-family: Tahoma">&nbsp; ریال</span>

</asp:Panel>
<asp:Panel ID="Panel1" runat="server" Width="150px">
<span style="font-size: 9pt; font-family: Tahoma">سبد خرید خالی است.</span></asp:Panel>

</td>
</tr>
<tr>
<td align="center">


</td>
</tr>
</table>
</ContentTemplate>
<Triggers>
<asp:AsyncPostBackTrigger ControlID="Timer1" EventName="Tick" />
</Triggers>
</asp:UpdatePanel>

2----------------------------- یوزرکنترل سبد خرید#c :

protected void Page_Load(object sender, EventArgs e)
{
GetBasketData();
try
{
if (Convert.ToInt32((Label1.Text)) > 0)
{
Panel2.Visible = true;
Panel1.Visible = false;
}
}catch
{
Panel1.Visible = true;
Panel2.Visible = false;
}

}
public void GetBasketData()
{
SqlConnection cnn = new SqlConnection(ConfigurationManager.ConnectionStrin gs["ConnectionString"].ConnectionString);
string sql = "SELECT sum(QSale.Qty) AS T,Sum(Sale.Qty * Sale.UPrice) AS s FROM Sale INNER JOIN SansDet ON Sale.SID = SansDet.SID AND Sale.SansNumber = SansDet.SansNumber INNER JOIN Section ON Sale.SID = Section.SID INNER JOIN Saloon ON Section.SaloonID = Saloon.SaloonID where payment<>1 and (basketid in (select basketID from alivebasket where username='" + Page.User.Identity.Name + "')) and Sale.UserName='" + Page.User.Identity.Name + "'";
cnn.Open();
SqlCommand cmd = new SqlCommand(sql, cnn);
SqlDataAdapter dap = new SqlDataAdapter(cmd);
DataSet ds = new DataSet();
dap.Fill(ds);
Label1.Text = ds.Tables[0].Rows[0][0].ToString();
Label2.Text = ds.Tables[0].Rows[0][1].ToString();
cnn.Close();

}
protected void Button1_Click(object sender, EventArgs e)
{
Response.Redirect("buy_det.aspx");
}
protected void Timer1_Tick(object sender, EventArgs e)
{
GetBasketData();
}

3----------------------------- hاینم صفحه اصلیم :


<asp:UpdatePanel ID="UpdatePanel1" runat="server" >
<ContentTemplate>
<div style="margin-right:2%;margin-left:2%;margin-top:1%;" id="MainUserMenu">
<div class="container">


<ul id="nav" >
<li><asp:LoginStatus ID="exit" runat="server" LoginText="ورود" LogoutText="خروج"
LogoutAction="Redirect" LogoutPageUrl="~/vinaticket.aspx" Font-Names="Tahoma"
Font-Size="10pt" /></li>
<li><asp:LinkButton ID="basket" runat="server" onclick="basket_Click"
Font-Names="Tahoma" Font-Size="10pt">سبد خرید و پرداخت</asp:LinkButton></li>
<li><asp:LinkButton ID="buy_ticket" runat="server" onclick="buy_ticket_Click"
Font-Names="Tahoma" Font-Size="10pt">خرید بلیط </asp:LinkButton></li>
<li><asp:LinkButton ID="your_ticket" runat="server" onclick="your_ticket_Click"
Font-Names="Tahoma" Font-Size="10pt">بلیط های شما</asp:LinkButton></li>
<li><a class="hsubs" style="font:10pt tahoma;" href="#">کاربر</a>
<ul class="subs">
<li><asp:LinkButton ID="pass" runat="server" onclick="pass_Click">تغییر رمز</asp:LinkButton></li>
<li><asp:LinkButton ID="profile" runat="server" onclick="profile_Click">تغییر مشخصات</asp:LinkButton></li>

</ul>
</li>


</ul>

</div>

</div>
<asp:PlaceHolder ID="PlaceHolder1" runat="server" ViewStateMode="Enabled">

</asp:PlaceHolder>

</ContentTemplate>
<Triggers>
<asp:PostBackTrigger ControlID="exit" />
</Triggers>
</asp:UpdatePanel>


<asp:UpdateProgress ID="UpdateProgress1" DisplayAfter="0"
AssociatedUpdatePanelID="UpdatePanel1" runat="server">
<ProgressTemplate>
<div style="top:45%;left:45%;position:absolute">
لطفا منتظر بمانید<br />
<img src="images/loadmain.png" alt="منتظر بمانید" />
</div>
</ProgressTemplate>
</asp:UpdateProgress>
</div>

</asp:Content>
<asp:Content ID="c3" ContentPlaceHolderID="ContentPlaceHolder2" runat="server">
<uc2:Basket ID="Basket1" runat="server" />
<div style="text-align:center;">
<asp:Button
ID="btn_pay_updtpnl" runat="server" Font-Names="Tahoma" Font-Size="9pt"
Text="پرداخت" OnClick="btn_pay_updtpnl_Click" BackColor="#08AFEE"
BorderColor="#08AFEE" BorderStyle="Solid" BorderWidth="2px" Font-Bold="True"
ForeColor="White" />
</div>
</asp:Content>

ahmad156
شنبه 30 دی 1391, 14:26 عصر
timer رو توی updatepanel مورد نظر بزارین

hgh.just.hony
شنبه 30 دی 1391, 14:47 عصر
ممنون از جواب
ابتدا تایمر توی updatepanel بود که تو سایت stackoverflow خوندم جایی که بیرون بگذاری جواب میگیری
اما من نه این فرمی نه اون فرم جواب نگرفتم
میشه بیشتر راهنمایی ام کنی؟

shojaee.mohsen
شنبه 30 دی 1391, 15:18 عصر
طبق حالت پیش فرض updatepanel هر دو updatepanel به client ارسال می شوند ( به همراه یک سری اطلاعات دیگه مثل viewstate و ...). خوب حالا اگه بخواهیم فقط همون updatepanel که دکمه داخل اون کلیک شده update بشه کافیه دو تا attribute زیر رو به updatepanel ها اضافه کنیم :

UpdateMode : که از اسمش مشخصه چه کار می کنه و یکی از این دو مقدار رو باید بهش بدیم : Always یا Conditional
مشخص می کنه که آیا همیشه updatepanel به روز میشه یا باید تحت trigger به روز بشه.
ChildrenAsTriggers : مشخص می کنه که event های کنترل های داخلش به عنوان trigger در نظر گرفته بشن.
پس اگه UpdateMode="Conditional" ChildrenAsTriggers="true" رو به هر دوتا updatepanel اضافه کنیم نتیجه این میشه که فقط همون updatepanel که دکمه کلیک شده توی اون بوده update بشه

hgh.just.hony
شنبه 30 دی 1391, 15:29 عصر
ممنون از راهنماییت دوست عزیز
ممنونم. مشکلم حل شد
نکته جواب همین بود که دوست خوبم گفت :


پس اگه UpdateMode="Conditional" ChildrenAsTriggers="true" رو به هر دوتا updatepanel اضافه کنیم نتیجه این میشه که فقط همون updatepanel که دکمه کلیک شده توی اون بوده update بشه

mohsenre
پنج شنبه 03 اسفند 1391, 00:50 صبح
سلام .اگه میشه کمکم کنید ممنون میشم.من یه آپدیت پنل تو صفحه وب دارم که اون صفحه وب تو مستر پیج هستش حالا وقی اجراش میکنم خطای زیرو میده
Microsoft JScript runtime error: Sys.WebForms.PageRequestManagerParserErrorExceptio n: The message received from the server could not be parsed.