PDA

View Full Version : مشکل در وب‌فرم برای موبایل



Erfanian
سه شنبه 13 اردیبهشت 1384, 13:43 عصر
با سلام
من در موبایل وب فرم کنترلی از نوع SelectionList گذاشته‌ام و می‌خواهم هنگام
رخ دادن SelectedIndexChanged کاری انجام دهم.
برخلاف وب‌فرمهای معمولی این کنترل فاقد AutoPostBack است و برای چک عوض شدن و کار با آیتمی از SelectionList باید از Command استفاده کرد!
لطفا علت و راه‌حل را بگوئید. :)

Behrouz_Rad
سه شنبه 13 اردیبهشت 1384, 15:01 عصر
این سوال یک مقدار جای بحث داره.
آیتم هایی که در یک کنترل موبایل سلکشن لیست ASP.NET وجود دارند، به سمت سرور اصطلاحا PostBack نمی کنند.
در حقیقت، وب فرم موبایلی که SelectionList در آن وجود دارد به سمت سرور فرستاده می شود که اینکار با استفاده از یک Command انجام می پذیرد.
هنگامی که فرم با استفاده از Command به سرور ارسال شد، رویداد SelectedIndexChanged کنترل SelectionList اتفاق می افتد.

راه دیگه ای که وجود داره این هست که جداگانه برای موبایل هایی که از جاوا اسکریپت پشتیبانی می کنند، کدنویسی جداگانه ای انجام بدیم.
بدین منظور باید به شکل زیر عمل کرد:

1) یک کنترل Panel موبایل به فرم اضافه کنید.
2) یک کنترل deviceSpecific همراه با مساوی قرار دادن مقدار خاصیت Filter بخش Choice آن به supportsJavaScript نیز به فرم اضافه کنید.
Choice همانند Select Case در VB یا Switch در #C است.
نکته مهم: برای دستگاه های مختلف باید از Choice های مختلف استفاده کنید. مثلا IsHTML32 برای HTML.
3) یک کنترل DropDownList به فرم اضافه کنید (کنترل ASP.NET نه موبایل) و خاصیت AutoPostBack آن را برابر با True قرار دهید.
4) برای دستگاه هایی نیز که از جاوا اسکریپت حمایت نمی کنند، باید یک قسمت ContentType تعریف کنید و کدهای مختص اون دستگاه ها رو در آنجا بنویسید.

کد توضیحات فوق:


<mobile:Panel id="Panel1" runat="server">
<mobile:DeviceSpecific id="DeviceSpecific1" runat="server">
<Choice Filter="supportsJavaScript">
<ContentTemplate>
<asp:DropDownList id="DropDownList1" runat="server"
OnSelectedIndexChanged=
"DropDownList1_SelectedIndexChanged"
AutoPostBack="True">
<asp:ListItem Value="a">1</asp:ListItem>
<asp:ListItem Value="b">2</asp:ListItem>
<asp:ListItem Value="c">3</asp:ListItem>
</asp:DropDownList>
</ContentTemplate>
</Choice>
<Choice>
<ContentTemplate>
<mobile:SelectionList id="SelectionList1"
runat="server"
OnSelectedIndexChanged=
"DropDownList1_SelectedIndexChanged">
<Item Value="a" Text="1"/>
<Item Value="a" Text="2"/>
<Item Value="a" Text="3"/>
</mobile:SelectionList>
<mobile:Command runat="server" text="Submit"/>
</ContentTemplate>
</Choice>
</mobile:DeviceSpecific>

تنطیمات Web.Config:


<configuration>
<system.web>
<deviceFilters>
<filter name="supportsJavaScript"
compare="javascript"
argument="true"/>
</deviceFilters>
</system.web>
</configuration>


یک مثال: دو فرم داریم و می خواهیم مقادیر انتخاب شده در SelectionList فرم اول (Source) به فرم دوم (Destination) پاس داده شود.


Source.aspx

<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" Language="C#" %>
<mobile:Form runat=server method=post action=destination.aspx>
<mobile:SelectionList runat=server
selectType=MultiSelectListBox id=myList>
<item text=behrouz1 value=1/>
<item text=behrouz2 value=2/>
<item text=behrouz3 value=3/>
</mobile:SelectionList>
<mobile:command runat=server text=Post/>
</mobile:Form>




Destination.aspx

<%@ Page Inherits="System.Web.UI.MobileControls.MobilePage" Language="C#" %>
<%@ Register TagPrefix="Mobile"
Namespace="System.Web.UI.MobileControls"
Assembly="System.Web.Mobile" %>
<script runat=server language=cs>
public void Page_Load()
{
label1.Text=Request["myList"];
}
</script>

<mobile:form runat=server>
<mobile:label id=label1 runat=server/>
</mobile:form>

نکته مهم: بسته به نوع دستگاه کاربر، مقادیر ارسالی به صفحه Destination.aspx با علامات مختلفی ارسال می شوند.
مثلا ممکنه مقادیر با ویرگول از هم جدا شده باشند یا در انتهای آنها سیمی کالون وجود داشته باشد که با کدنویسی میشه مقادیر اصلی رو استخراج کرد.
موفق باشید.
:wise1:

Erfanian
چهارشنبه 14 اردیبهشت 1384, 06:56 صبح
با عرض سلام
بسیار بسیار از جواب شما متشکرم
همیشه موفق باشید..... :تشویق: :)