PDA

View Full Version : مشکل با postback بعد از نشان دادن پنل



veronika
یک شنبه 24 بهمن 1389, 17:12 عصر
دوستان سلام
من یک dropdown دارم که با توجه به مقدار انتخابی پنل مورد نظر را نشون میده.در اون پنل یک دکمه هست که به دیتابیس وصل میشه و عملیات جستجو را انجام میده و در گرید نشون میده مشکل من اینه که وقتی روی دکمه کلیک می کنم صفحه دوباره به حالت اول بر میگرده و پنل را نشون نمیده.با اینکه پنل مورد نظر را داخل updatepanle گذاشتم ولی باز هم مشکلم حل نشد.
ممنون میشم راهنمایی کنید.


$(function() {
$('select[id$=drpsearch]').change(function(e) {
if (this.value == 2) {
$('div[id$=Paneltype]').show(2000);
//e.preventDefault();
//$('div[id$=Panel1]').show(2000);
}
});

});

mehdi.mousavi
یک شنبه 24 بهمن 1389, 17:49 عصر
سلام.
پیر شدم از بس گفتم کنترلهای Server-Side در ASP.NET رو اینطوری آدرس نکنید:


select[id$=drpsearch]

این کار صحیح نیست، چون اگر فردا روزی مایکروسافت به هر دلیلی منطق تولید Unique ID هاشو تغییر بده، شما باید بشینید خروارها کد JavaScript رو دستی بررسی کنید تا بتونید اونو به نسخه جدید پورت کنید. از این گذشته، کد فوق دردسرهایی رو نیز ممکنه ایجاد کنه که خوب، میتونید با یه جستجو در نوشته های قبلی من، با اون دردسرها آشنا بشید. روش صحیح اینه که بدین شکل عمل کنید:


$('#<%=drpsearch.ClientID%>')

اینطوری، ASP.NET Runtime خودش Client ID ی تولید شده رو در Place holder فوق قرار میده و دیگه اون مشکلات بوجود نخواهد اومد.

اما حالا اصل سوال... شما Panel مورد نظر رو چطوری مخفی کرده اید؟ آیا این احتمال وجود داره که اصلا اونو Render نکرده باشید؟ (یا به بیان دیگه، Visible اش رو سمت سرور false کرده باشید؟).

به این مثال دقت کنید:


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
<script type="text/javascript" src="/Scripts/jquery-1.4.1.min.js"></script>
<script type="text/javascript">
$(function () {
var pnl = $('#<%=UpdatePanel1.ClientID%>').hide();
$('a:first').click(function () {
pnl.show('slow');
$(this).html('clicked');
});
});
</script>
</head>
<body>
<form id="form1" runat="server">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
<div>
<a href="#">Display Panel</a>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>
<asp:Button ID="btnTest" runat="server" Text="Test" OnClick="btnTest_Click" />
</ContentTemplate>
</asp:UpdatePanel>
</div>
</form>
</body>
</html>



اینجا، وقتی من روی Display Panel بزنم، Panel مورد نظر نمایش داده میشه (که حاوی یک Button هستش). سپس وقتی اون Button رو میزنم، Partial Postback رخ میده و دیگه Link مزبور نیز به حالت اول برنمیگرده...

در واقع میخوام بگم قاعدتا دارید جایی یه اشتباه کوچک مرتکب میشید که باعث Full Postback شده و در نتیجه Element های صفحه به حالت اولی برمیگرده. اگر با بررسی کد فوق بازهم به نتیجه نرسیدید، لطفا کد ASP.NET خودتون رو ضمیمه کنید تا ببینم مشکل چی هستش.

موفق باشید.

veronika
یک شنبه 24 بهمن 1389, 19:14 عصر
ممنون .ولی وقتی روی dropdown کلیک میکنم و پنل را نشون میده ایتم های dropdown را خالی میکنه.ممنون میشم کدی که گذاشتم را بررسی کنه.


<%@ Page Language="C#" MasterPageFile="~/hotelroommaster.Master" AutoEventWireup="true" CodeBehind="offer.aspx.cs" Inherits="hotel.offer" Title="Untitled Page" %>
<asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server">


<script type="text/javascript" src="/Scripts/jquery-1.4.1.min.js"></script>


<script type="text/javascript">


$(function () {
var pnl = $('#<%=UpdatePanel1.ClientID%>').hide();
$('#<%=drpsearch.ClientID%>').change(function() {
if (this.value == 2) {
$('#<%=Panelprice.ClientID%>').show(2000);
pnl.show(2000);
$(this).html('clicked');
//$('div[id$=Panel1]').show(2000);
}





});


});




$(function () {
var pnl1 = $('#<%=UpdatePanel2.ClientID%>').hide();
$('#<%=drpsearch.ClientID%>').change(function() {
if (this.value == 1) {
$('#<%=Paneltype.ClientID%>').show(2000);
pnl1.show(2000);
$(this).html('clicked');
//$('div[id$=Panel1]').show(2000);
}





});


});






</script>

<style type="text/css">

</style>
</asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="ContentPlaceHolder1" runat="server">


<form id="form1" runat="server">


<table id="Table1" cellSpacing="0" cellPadding="0" width="100%" border="0" dir="rtl">
<TR>
<TD style="HEIGHT: 15px; width: 35%;" width="13%" colspan="2">
&nbsp;</TD>
<TD style="HEIGHT: 15px" width="13%">
&nbsp;</TD>
<TD style="HEIGHT: 15px" width="30%">
&nbsp;</TD>
<TD style="WIDTH: 162px; HEIGHT: 15px" width="162">
</TD>
<TD style="HEIGHT: 15px" width="22%">
<asp:ScriptManager ID="ScriptManager1" runat="server">
</asp:ScriptManager>
</TD>
</TR>
<TR>
<TD style="HEIGHT: 20px" width="8%">
<asp:label id="Label9" runat="server" Font-Names="Tahoma" Font-Size="12px"
ForeColor="Black">جستجو با</asp:label>
</TD>
<TD style="HEIGHT: 20px" width="22%">
<asp:DropDownList ID="drpsearch" runat="server" Font-Names="tahoma"
Font-Size="12px">
<asp:ListItem>انتخاب کنید</asp:ListItem>
<asp:ListItem Value="1">نوع هتل</asp:ListItem>
<asp:ListItem Value="2">قیمت</asp:ListItem>
</asp:DropDownList>
</TD>
<TD style="HEIGHT: 20px" width="18%">


&nbsp;</TD>
<TD style="HEIGHT: 20px" width="22%">
&nbsp;</TD>
<TD style="WIDTH: 162px; HEIGHT: 20px" width="162">
&nbsp;</TD>
<TD style="HEIGHT: 20px" width="22%">
&nbsp;</TD>
</TR>
<TR>
<TD style="HEIGHT: 18px" width="8%">
&nbsp;</TD>
<TD style="HEIGHT: 18px" width="22%">
&nbsp;</TD>
<TD style="HEIGHT: 18px" width="13%">
&nbsp;</TD>
<TD style="HEIGHT: 18px" width="22%">

&nbsp;</TD>
<TD style="WIDTH: 162px; HEIGHT: 18px" width="162">
&nbsp;</TD>
<TD style="HEIGHT: 18px" width="22%">
&nbsp;</TD>
</TR>
</table>
<asp:UpdatePanel ID="UpdatePanel1" runat="server">
<ContentTemplate>

<asp:Panel ID="Panelprice" runat="server" >
<!--Style="display: none;"*/-->
<table>

<TR>
<TD width="10%">


<asp:Label ID="lblStatus1" runat="server" Font-Names="Tahoma"
Font-Size="12px" ForeColor="Black">حداقل قیمت</asp:Label>


</TD>
<TD width="10%">
<asp:TextBox ID="txtmin" runat="server" BorderColor="SteelBlue"
BorderStyle="Solid" BorderWidth="1px" Font-Names="Tahoma" Font-Size="10px"
Width="150px"></asp:TextBox>
</TD>
<TD width="10%">
<asp:Label ID="lblStatus2" runat="server" Font-Names="Tahoma"
Font-Size="12px" ForeColor="Black">حداکثر قیمت</asp:Label>
</TD>
<TD width="13%">
<asp:TextBox ID="txtmax" runat="server" BorderColor="SteelBlue"
BorderStyle="Solid" BorderWidth="1px" Font-Names="Tahoma" Font-Size="10px"
Width="150px"></asp:TextBox>
</TD>
<TD width="12%">
<asp:Button ID="Button1" runat="server" Font-Names="tahoma"
Font-Size="12px" ForeColor="#6F3A15" onclick="Button1_Click" Text="جستجو" />
</TD>
<TD width="14%">
&#160;</TD>
<td width="38%">
&#160;</td>
</TR>
</table>
<table>
<TR>
<TD width="80%">
<asp:GridView ID="grdprice" runat="server" CellPadding="4"
ForeColor="#333333" GridLines="None" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="sdsprice" EmptyDataText="رکوردی برای نمایش وجود ندارد."
onselectedindexchanged="grdprice_SelectedIndexChanged" Font-Names="tahoma"
Font-Size="12px" Font-Strikeout="False" PageSize="8">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<EmptyDataRowStyle Font-Names="tahoma" Font-Size="10px" Font-Strikeout="False"
ForeColor="#990000" />
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
ReadOnly="True" SortExpression="id" Visible="False" />
<asp:BoundField DataField="roomnumber" HeaderText="شماره اتاق"
SortExpression="roomnumber" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="hotelid" HeaderText="شناسه هتل"
SortExpression="hotelid" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="price" HeaderText="قیمت برای هر شب"
SortExpression="price" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="bedtype" HeaderText="نوع اتاق"
SortExpression="bedtype" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="description" HeaderText="توضیحات"
SortExpression="description" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="capacity" HeaderText="ظرفیت"
SortExpression="capacity" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="roomtype" HeaderText="نوع "
SortExpression="roomtype" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="hotelname" HeaderText="نام هتل"
SortExpression="hotelname" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="address" HeaderText="آدرس"
SortExpression="address" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="ostan" HeaderText="استان" SortExpression="ostan" />
<asp:BoundField DataField="city" HeaderText="شهر" SortExpression="city" />
<asp:BoundField DataField="phone" HeaderText="تلفن" SortExpression="phone" />
<asp:BoundField DataField="starrate" HeaderText="درجه هتل"
SortExpression="starrate" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:CommandField HeaderText="انتخاب" SelectText="انتخاب"
ShowSelectButton="True">
<ItemStyle ForeColor="#990000" />
</asp:CommandField>
</Columns>

<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<HeaderStyle BackColor="#990000" Font-Bold="False" ForeColor="White"
Font-Names="tahoma" Font-Size="13px" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</TD>
<TD width="22%">
<asp:SqlDataSource ID="sdsprice" runat="server"
ConnectionString="<%$ ConnectionStrings:hotleConnectionString %>"
SelectCommand="sp_room_searchbyprice" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="txtmin" Name="min" PropertyName="Text"
Type="String" />
<asp:ControlParameter ControlID="txtmax" Name="max" PropertyName="Text"
Type="String" />
</SelectParameters>


</asp:SqlDataSource>
</TD>
<TD width="22%">
&#160;</TD>
</TR>

</table>
<table>
<TR>
<TD width="30%">
&#160;</TD>
<TD width="16%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD width="22%">
&#160;</TD>
</TR>

</table>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>


<asp:UpdatePanel ID="UpdatePanel2" runat="server">
<ContentTemplate>

<asp:Panel ID="Paneltype" runat="server" >
<!--Style="display: none;"*/-->
<table>

<TR>
<TD width="10%">


<asp:Label ID="Label1" runat="server" Font-Names="Tahoma"
Font-Size="12px" ForeColor="Black">درجه هتل</asp:Label>


</TD>
<TD width="10%">
<asp:DropDownList ID="drprate" runat="server" Font-Names="tahoma"
Font-Size="12px" Width="50px">
<asp:ListItem></asp:ListItem>
<asp:ListItem>1</asp:ListItem>
<asp:ListItem>2</asp:ListItem>
<asp:ListItem>3</asp:ListItem>
<asp:ListItem>4</asp:ListItem>
<asp:ListItem>5</asp:ListItem>
</asp:DropDownList>
</TD>
<TD width="12%">
<asp:Button ID="btntypesearch" runat="server" Font-Names="tahoma"
Font-Size="12px" ForeColor="#6F3A15" onclick="btntypesearch_Click"
Text="جستجو" />
</TD>
<TD width="13%">
&#160;</TD>
<TD width="12%">
&#160;</TD>
<TD width="14%">
&#160;</TD>
<td width="38%">
&#160;</td>
</TR>
</table>
<table>
<TR>
<TD width="80%">
<asp:GridView ID="grdtype" runat="server" CellPadding="4"
ForeColor="#333333" GridLines="None" AllowPaging="True"
AllowSorting="True" AutoGenerateColumns="False" DataKeyNames="id"
DataSourceID="sdsrate" EmptyDataText="رکوردی برای نمایش وجود ندارد."
onselectedindexchanged="grdtype_SelectedIndexChanged" Font-Names="tahoma"
Font-Size="12px" Font-Strikeout="False" PageSize="8">
<FooterStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<RowStyle BackColor="#FFFBD6" ForeColor="#333333" />
<EmptyDataRowStyle Font-Names="tahoma" Font-Size="10px" Font-Strikeout="False"
ForeColor="#990000" />
<Columns>
<asp:BoundField DataField="id" HeaderText="id" InsertVisible="False"
ReadOnly="True" SortExpression="id" Visible="False" />
<asp:BoundField DataField="roomnumber" HeaderText="شماره اتاق"
SortExpression="roomnumber" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="hotelid" HeaderText="شناسه هتل"
SortExpression="hotelid" Visible="False" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="price" HeaderText="قیمت برای هر شب"
SortExpression="price" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="bedtype" HeaderText="نوع اتاق"
SortExpression="bedtype" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="description" HeaderText="توضیحات"
SortExpression="description" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="capacity" HeaderText="ظرفیت"
SortExpression="capacity" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="roomtype" HeaderText="نوع "
SortExpression="roomtype" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="hotelname" HeaderText="نام هتل"
SortExpression="hotelname" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="address" HeaderText="آدرس"
SortExpression="address" >
<HeaderStyle Wrap="False" />
</asp:BoundField>
<asp:BoundField DataField="ostan" HeaderText="استان" SortExpression="ostan" />
<asp:BoundField DataField="city" HeaderText="شهر" SortExpression="city" />
<asp:BoundField DataField="phone" HeaderText="تلفن" SortExpression="phone" />
<asp:BoundField DataField="starrate" HeaderText="درجه هتل"
SortExpression="starrate" />
<asp:CommandField SelectText="انتخاب" ShowSelectButton="True">
<ItemStyle ForeColor="#990000" />
</asp:CommandField>
</Columns>

<PagerStyle BackColor="#FFCC66" ForeColor="#333333" HorizontalAlign="Center" />
<SelectedRowStyle BackColor="#FFCC66" Font-Bold="True" ForeColor="Navy" />
<HeaderStyle BackColor="#990000" Font-Bold="True" ForeColor="White" />
<AlternatingRowStyle BackColor="White" />
</asp:GridView>
</TD>
<TD width="22%">
<asp:SqlDataSource ID="sdsrate" runat="server"
ConnectionString="<%$ ConnectionStrings:hotleConnectionString %>"
SelectCommand="sp_room_searchbyrate" SelectCommandType="StoredProcedure">
<SelectParameters>
<asp:ControlParameter ControlID="drprate" Name="rate" PropertyName="SelectedValue"
Type="String" />
</SelectParameters>


</asp:SqlDataSource>
</TD>
<TD width="22%">
&#160;</TD>
</TR>

<TR>
<TD width="16%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD class="style4">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
</TD>
<TD width="22%">
</TD>
<td width="22%">
&#160;</td>
</TR>
<TR>
<TD style="HEIGHT: 2px" width="16%">
&#160;</TD>
<TD style="HEIGHT: 2px" width="22%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD class="style5">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD style="HEIGHT: 2px" width="22%">
&#160;</TD>
<td style="HEIGHT: 2px" width="22%">
&#160;</td>
</TR>
<TR>
<TD width="16%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD class="style4">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<td width="22%">
&#160;</td>
</TR>
</table>
<table>
<TR>
<TD width="30%">
&#160;</TD>
<TD width="16%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD width="22%">
&#160;</TD>
</TR>
<TR>
<TD width="33%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD width="13%">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD width="22%">
&#160;</TD>
</TR>
<TR>
<TD width="16%">
&#160;</TD>
<TD width="22%" colSpan="2">
&#160;</TD>
<TD width="22%">
</TD>
<TD style="WIDTH: 162px" width="162">
</TD>
<TD width="22%">
</TD>
</TR>
<TR>
<TD width="13%">
&#160;</TD>
<TD width="22%" colSpan="2">
&#160;</TD>
<TD width="22%">
&#160;</TD>
<TD style="WIDTH: 162px" width="162">
&#160;</TD>
<TD width="22%">
&#160;</TD>
</TR>

</table>
</asp:Panel>
</ContentTemplate>
</asp:UpdatePanel>
</form>
</asp:Content>

veronika
چهارشنبه 27 بهمن 1389, 11:28 صبح
مشکل من با تغییر کد به شکل زیر حل شد.



<script type="text/javascript" src="/Scripts/jquery-1.4.1.min.js"></script>


<script type="text/javascript">


$(function () {
var pnl = $('#<%=UpdatePanel1.ClientID%>').hide();
var pnl1 = $('#<%=UpdatePanel2.ClientID%>').hide();
$('#<%=drpsearch.ClientID%>').change(function() {
if (this.value == 2) {
pnl.show(1000);
// $('#<%=Panelprice.ClientID%>').show(1000);
//$(this).html('clicked');
$('#<%=Panelprice.ClientID%>').show(1000);


//$('div[id$=Panel1]').show(2000);
return false;
}

if (this.value == 1) {
pnl1.show(2000);
$('#<%=Paneltype.ClientID%>').show(2000);

// $(this).html('clicked');
//$('div[id$=Panel1]').show(2000);
return false;
}





});


});



//
// $(function () {
// var pnl1 = $('#<%=UpdatePanel2.ClientID%>').hide();
// $('#<%=drpsearch.ClientID%>').change(function() {
// if (this.value == 1) {
// $('#<%=Paneltype.ClientID%>').show(2000);
// pnl1.show(2000);
// $(this).html('clicked');
// //$('div[id$=Panel1]').show(2000);
// }
//
//
//
//
//
// });
//
//
// });






</script>