PDA

View Full Version : حرفه ای: دسترسی به کنترل های سرور با کد کلاینت



aminaltavista
سه شنبه 28 خرداد 1392, 15:34 عصر
سلام

میخوام id یه تگ کلاینت رو به متد سرور ارسال کنم که متد سرور به کنترل های سرور دسترسی داشته باشه(استاتیک نباشه)در واقع میخوام با کلیک روی یه تگ a وب یوزر کنترل به پنل اضاف بشه.

با اسکریپت منجر نشد:ناراحت: کد جی کوئری ایجکس هم کار نمیکنه چه پست چه گت .
از دوستان استاد و حرفه ای میخوام کمک کنند. ممنون:تشویق:

aminaltavista
چهارشنبه 29 خرداد 1392, 10:23 صبح
دوستان کسی نبود کمک کنه، گمون نکنم چیز خیلی خاصی باشه.:افسرده:

mehrzad_ali
چهارشنبه 29 خرداد 1392, 12:39 عصر
این کد با دریافت کلیک روی Input کد صفحه رو به متد DOcall پاس میده و این متد محتویات صفحه رو بصورت اجاکسی توی div Result نشون میده


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$(document).ready(function () {

$("input[type='button']").click(function () {
var varMyName = $(this).val();
var myData = "{'pid': '" + varMyName + "'}";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
//binddata webmethod
url: "Default.aspx/docall",
data: myData,
dataType: "json",
success: function (data) {

$('.result').html(data.d);
},
error: function (result) {
alert("Error");
}
});
});

});
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" id="Button1" value="788028855" />
<input type="button" id="Button2" value="864372724" />
<div class="result">
</div>
</form>
</body>
</html>



این متد هم که اسمش رو اون بالا صدا زدیم اطلاعات رو بر اساس ID از دیتابیس دریافت میکنه



[WebMethod]
public static string docall(string pid)
{
DataTable dt = clsDataAccessLayer.Select(string.Format("select name from Pages where pageID=N'{0}'", pid));
string body = dt.Rows[0][0].ToString();
return body;
}

aminaltavista
چهارشنبه 29 خرداد 1392, 12:58 عصر
این کد با دریافت کلیک روی Input کد صفحه رو به متد DOcall پاس میده و این متد محتویات صفحه رو بصورت اجاکسی توی div Result نشون میده


<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<script src="jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">

$(document).ready(function () {

$("input[type='button']").click(function () {
var varMyName = $(this).val();
var myData = "{'pid': '" + varMyName + "'}";
$.ajax({
type: "POST",
contentType: "application/json; charset=utf-8",
//binddata webmethod
url: "Default.aspx/docall",
data: myData,
dataType: "json",
success: function (data) {

$('.result').html(data.d);
},
error: function (result) {
alert("Error");
}
});
});

});
</script>
</head>
<body>
<form id="form1" runat="server">
<input type="button" id="Button1" value="788028855" />
<input type="button" id="Button2" value="864372724" />
<div class="result">
</div>
</form>
</body>
</html>



این متد هم که اسمش رو اون بالا صدا زدیم اطلاعات رو بر اساس ID از دیتابیس دریافت میکنه



[WebMethod]
public static string docall(string pid)
{
DataTable dt = clsDataAccessLayer.Select(string.Format("select name from Pages where pageID=N'{0}'", pid));
string body = dt.Rows[0][0].ToString();
return body;
}


باز هم خدارو شکر که یکی جواب داد.
جیگر طلا فرمایشتون متین اما متد استاتیکه و اجازه کاربا کنترل پنل رو بهم نمیده به عبارتی نمیشناستش .:افسرده: احتمالا من منظورم رو بد رسوندم شما ببخشید.
اگر راه حلی برا این مشکل دارید با کمال میل میپذیرم.

mehrzad_ali
چهارشنبه 29 خرداد 1392, 13:06 عصر
• متد استاتیکه . خوب باشه
• کنترل پنل . کدوم کنترل پنل؟
•به عبارتی نمیشناستش . کجا نمیشناسه ؟ چیو نمیشناسه ؟

aminaltavista
چهارشنبه 29 خرداد 1392, 13:16 عصر
• متد استاتیکه . خوب باشه
• کنترل پنل . کدوم کنترل پنل؟
•به عبارتی نمیشناستش . کجا نمیشناسه ؟ چیو نمیشناسه ؟

خدمتتون عرض میکنم:

منظورم یکی از کنترل های سرور هست ، من با پنل کار میکنم (در واقع با فراخوانی یک متد و ارسال پارامتر به اون که مقدار اسم وب یوزر کنترل هست، وب یوزر کنترل تو پنل لود میشه) ناگفته نمونه که از طریق سرور تست کردم کاملا درست کار میکنه.
. بله ، داخل متدی که Attribute ش Web method هست در واقع همون کد سرور وقتی این کد رو مینویسم از c که پنل هست خطا میگیره و چون متد استاتیک هست نمیشناستشc.Controls.Add(page.LoadControl("control.ascx"));

aminaltavista
چهارشنبه 29 خرداد 1392, 13:27 عصر
یه راه حل پیدا کردم اما کافی نیست ، سورس رو براتون ضمیمه میکنم:

105796

mehrzad_ali
چهارشنبه 29 خرداد 1392, 14:00 عصر
http://www.aspsnippets.com/Articles/Dynamically-load-and-display-ASPNet-UserControl-using-jQuery-AJAX-and-WebMethod.aspx
همونیه که میخوای

aminaltavista
چهارشنبه 29 خرداد 1392, 17:16 عصر
http://www.aspsnippets.com/Articles/Dynamically-load-and-display-ASPNet-UserControl-using-jQuery-AJAX-and-WebMethod.aspx
همونیه که میخوای

مجددا تشکر ، فقط نحوه کارکردش چه طوری هست؟ یه متن مینویسم و دکمه کناریش رو میزنم اما هیچ اتفاقی نمی افته، باز هم ببخشید که مزاحم شدم.:تشویق:

mehrzad_ali
چهارشنبه 29 خرداد 1392, 17:45 عصر
105807
اون قبلی مشکل داشت این درسته

aminaltavista
چهارشنبه 29 خرداد 1392, 20:16 عصر
105807
اون قبلی مشکل داشت این درسته

از گفتنش بسیار متنفرم اما متاسفانه این هم کار نمیکنه:ناراحت:

ممنون از این که وقتتون رو روش گذاشتید.

aminaltavista
چهارشنبه 29 خرداد 1392, 21:03 عصر
105807
اون قبلی مشکل داشت این درسته


باز هم سلام

خوبه یک بار برا همیشه این مشکل رفع بشه، خودتون بهتر میدونید مزیت تاپیک همینه!
public static Control control;
protected void Page_Load(object sender, EventArgs e)
{
control = this.Panel1;
}
[WebMethod]
public static void docall(string pid)
{
Page page = new Page();
Panel panel = control as Panel;
panel.Controls.Add(page.LoadControl(pid));
}

این کد سرور هست که با این کد تستش کردم درست کار میکنه

docall("UserControl.ascx");
و این هم فراخوانیش

حالا با کلیک رو این تگ میخوام که کد جاوا صدا زده بشه و پارامتر رو برا متد سرور بفرسته:

<a href="#" onclick="Load()" >تست</a>
تگی که روش کلیک میشه
<script src="\\ajax.googleapis.com/ajax/libs/jquery/1.10.1/jquery.min.js" type="text/javascript"></script>
<script type="text/javascript">
function Load(){
var id = "UserControl.ascx";
$.ajax({
type: "POST",
//binddata webmethod
url: "Default.aspx/docall",
data: id
});
}
</script>
وبالاخره کدی که استفاده میکنم.

ببینید کم کسری نداره. بهتر نیست از script manger استفاده شه؟