PDA

View Full Version : حرکت در صفحات DataGrid



30yavash
پنج شنبه 29 شهریور 1386, 12:24 عصر
با سلام خدمت دوستان.
یه وب سایت هست که با ASP.NET نوشته شده و یه بخش جستجوی اعضای سایت داره.
این بخش جستجو یه TexBox داره که اسم طرف رو توش وارد می کنی و سه تا فیلد Hidden داره به نام های:
__EVENTTARGET,__EVENTARGUMENT,__VIEWSTATE
نتایج در یک DataGrid لیست می شه که اگر تعداد صفحات زیاد باشه با کلیک روی شماره هر صفحه می تونید به صفحه مورد نظر دسترسی داشته باشید.
رفتن به صفحات مختلف با کد جاوا اسکریپت انجام می شه.مثلا لینک صفحه 4 دارای کد زیر است:

<a href="javascript:__doPostBack('DataGrid1$_ctl1$_ctl3','' )">4</a>

و تابع doPostBack هم به صورت زیر تعریف شده:

<script language="javascript" type="text/javascript">

function __doPostBack(eventTarget, eventArgument) {
var theform;
if (window.navigator.appName.toLowerCase().indexOf("microsoft") > -1) {
theform = document.Form1;
}
else {
theform = document.forms["Form1"];
}
theform.__EVENTTARGET.value = eventTarget.split("$").join(":");
theform.__EVENTARGUMENT.value = eventArgument;
theform.submit();
}
</script>

فرم اصلی هم به صورت زیر تعریف شده:

<form name="Form1" method="post" action="users.aspx" id="Form1">
<input type="hidden" name="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" value="در این قسمت کاراکترهای رندم قرار دارد" />

<input name="TextBox1" type="text" value="" id="TextBox1" />
<input type="submit" name="Button1" value="جستجو" id="Button1" />
</form>



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

کارهایی که کردم:
بعد از اتصال به سایت اصلی اطلاعات رو به صورت Post می فرستم.اطلاعات ارسالی عبارتند از:
__EVENTTARGET=DataGrid1:_ctl1:_ctl9
__EVENTARGUMENT=
TextBox1=نام کاربر
ولی فقط صفحه اول نتایج نمایش داده می شه!
من حتا referer رو توی برنامه خودم به آدرس سایت تغییر دادم گفتم شاید برنامه نویس اینو چک می کنه ولی فایده نداشت.

نکته:آدرس سایت رو نمی تونم بدم برای اینکه اصلا توی اینترنت نیست!این سایت توی شبکه داخلی یک اداره است.

Behrouz_Rad
پنج شنبه 29 شهریور 1386, 12:59 عصر
معلومه که کمی داری با اون سایت شیطونی می کنی ;)


ولی فقط صفحه اول نتایج نمایش داده می شه!

کاملا طبیعیه!
چون در این حالت ViewState ای وجود نداره که حالت Paging کنترل DataGrid رو حفظ کنه!
در نتیجه از اونجایی که برنامه نویس در Load صفحه با شرط IsPostBack داده ها رو در DataGrid قرار میده، این شرط همیشه مقدار "false" رو برمیگردونه و DataGrid همیشه اولین صفحه رو نمایش میده.
تولید مقادیر ViewState نیز توسط برنامه نویس قابل کنترل نیست پس تنها یک راه داری.
استفاده از کنترل Web Browser در Windows Application ات.
با این کنترل میتونی یک Request به سایت بفرستی، صفحه ی اول رو لود کنی و سپس در روال DocumentCompleted این کنترل که معرف پایان لود صفحه است، با بهره گیری از متدهای Web Browser همانند GetElementById("myTextBox").SetAttribute (برای قرار دادن متن در TextBox) و GetElementById("myButton").InvokeMember برای فراخوانی روال Click یک کنترل، کاری که میخوای رو به راحتی انجام بدی.

موفق باشید.

30yavash
پنج شنبه 29 شهریور 1386, 15:27 عصر
با تشکر از شما دوست عزیز.
من از WebBrowser استفاده کردم ولی منظور شما رو از قسمت زیر متوجه نشدم.



با این کنترل میتونی یک Request به سایت بفرستی، صفحه ی اول رو لود کنی و سپس در روال DocumentCompleted این کنترل که معرف پایان لود صفحه است، با بهره گیری از متدهای Web Browser همانند GetElementById("myTextBox").SetAttribute (برای قرار دادن متن در TextBox) و GetElementById("myButton").InvokeMember برای فراخوانی روال Click یک کنترل، کاری که میخوای رو به راحتی انجام بدی.


آخه کنترل WebBrowser اطلاعات رو که در یافت کرد بلافاصله نمایش می ده و من فرصت نمی کنم کد جاوا اسکریپت GetElementById("myTextBox").SetAttribute یا GetElementById("myButton").InvokeMember بهش اضاف کنم.

Behrouz_Rad
پنج شنبه 29 شهریور 1386, 17:03 عصر
تلاش کن میتونی....

30yavash
جمعه 30 شهریور 1386, 02:28 صبح
تلاش کن میتونی....
دستت طلا.
اشکالم رو فهمیدم.اصلا نیاز به جاوا اسکریپت نبود.
الان به طرز خیلی جالب توی صفحه ها حرکت می کنه.

Behrouz_Rad
جمعه 30 شهریور 1386, 09:35 صبح
خوشحالم که موفق شدی.

آخه کنترل WebBrowser اطلاعات رو که در یافت کرد بلافاصله نمایش می ده و من فرصت نمی کنم کد جاوا اسکریپت GetElementById("myTextBox").SetAttribute یا GetElementById("myButton").InvokeMember بهش اضاف کنم.
ضمن اینکه، GetElementById("myTextBox").SetAttribute و GetElementById("myButton").InvokeMember متدهایی از Web Browser هستند.
تشابه نام اونها با فرمان هایی در Java Script کاملا تصادفی است.

موفق باشید.