نحوه فراخوانی متد Code Behind در سمت Client
چهارشنبه 17 آذر 1395دراین مقاله ، با استفاده از JavaScript و jQuery ، چگونگی فراخوانی متد Code Behind در سمت Client را به شما نمایش خواهیم داد . برای انجام این کار سه راه وجود دارد .
معرفی :
تکه کدهایی که در این مقاله ارائه خواهد شد ، در برنامه های سبک مبتنی بر وب به فعل و انفعالات داده ها از Client side به متدهای Code Behinde کمک خواهد کرد .
پیش نیاز ها :
کسی که قصد پیاده سازی این را دارد باید ، اطلاعاتی در مورد متدهای Code Behind و متدهای Static داشته باشید و تجربه کافی در کار با JavaScript و jQuery را نیز داشته باشد .
قواعد کد :
ما در اینجا، از قاعده نام گذاری CamelCase برای نامگذاری متدها در JavaScript/jQuery و (#C) code behind استفاده خواهیم کرد.
راه اول - The Uno Wey :
function getDataFromCodeBehind()
{
var result=PageMethods.getUserName(onSuccess,onError)
}
function onSuccess(data)
{
alert(data);
}
function onError(errorMessage)
{
alert(errorMessage);
}
در HTML markup ، شما باید تکه کد زیر را اضافه کنید :
<asp:ScriptManager ID="ScriptManager1" runat="server" EnablePageMethods="true"></asp:ScriptManager>
و متد Code Behinde باید همانند زیر باشد :
[WebMethod] // using System.Web.Services;
public static string getUserName()
{
return "Mr. Shivi Gupta from Lucknow";
}
راه دوم - The Seconde Way :
حال اجازه دهید که از متد ajax.$ که برای گرفتن داده ها از یک XMLHttpRequest استفاده میکند ، استفاده کنیم . تکه کد برای متد jQuery همانند زیر است .
$.ajax({
type: "POST",
url: "CallingCodeBehindMethod.aspx/getUserName",
data: "{}",
contentType: "application/json; charset=utf-8",
dataType: "json",
success: function (msg) {
// Replace the div's content with the page method's return.
alert(msg.d);
}
});
برای کسب اطلاعات بیشتر در مورد ajax.$ میتوانید به این سایتمراجعه کنید .
و برای Hat trick ، ما باید از ajax.dll استفاده کنیم :
function ajaxDllgetDataFromCodeBehind()
{
var result = ReporterClass.getUserNameFromAjaxDll();
alert(result.value);
}
برای استفاده از این ، شما باید آن را به Referenceهای Solution پروژه خود اضافه کنید ، این کار را میتوانید به کمک NuGet انجام دهید .
همچینین تغییرات زیر را در Web.config اعمال کنید :
</connectionStrings>
<system.webServer>
<handlers>
<add name="CallCodeBehind"
verb="POST,GET" path="ajax/*.ashx"
type="Ajax.PageHandlerFactory, Ajax"/>
</handlers>
</system.webServer>
و آخرین چیزی که باید اضافه شود فایل reporterClass.cs است که دارای یک متد با نام ()getUserNameFromAjaxDll میباشد :
public class ReporterClass
{
[Ajax.AjaxMethod()]
public static string getUserNameFromAjaxDll()
{
return "Mr. Shivi Gupta from Lucknow";
}
}
و همچنین برای ثبت ReporterClass در صفحه aspx خود ، باید به متد load رفته و تغییرات زیر را اعمال کنیم :
if (!IsPostBack)
{
Response.Cache.SetCacheability(HttpCacheability.NoCache); // to disable cache
Response.Cache.SetAllowResponseInBrowserHistory(false);
Ajax.Utility.RegisterTypeForAjax(typeof(ReporterClass));
}
ما میدانیم که راه آر بسیار پر تکاپو است ، اما این زمانی آسان میشود که شما مجبور به استفاده از یک مدل MVVM و استفاده از Method Overloading یا بازیابی مقدار عظیم از داده ها ، میشوید .
راه سوم - The Hidden Way :
ما از hidden Fieldها برای مقداردهی در Code Behinde استفاده میکنیم ، و سپس از آن در سمت Client ، با استفاده از متد قدرتمند setTimeout برای بازیابی مقادیری که ما از سمت سرور نیاز داریم ، استفاده میکینم .
public void setHiddenFieldData()
{
HF_Value1.Value=ds.Tables[0].Rows[0][0];
}
تکه کد بالا در #C است ، که dataset ، ds بازیابی شده از پایگاه داده میباشد . و کدهای سمت Client همانند زیر میباشد :
function getServerSideHiddenField()
{
var t = self.setTimeout(function(){
var hf_FieldData=document.getElementById('HF_Value1').value;
},1000);
}
بنابراین ، ما متد های هر دو سمت یعنی ، Client side و Server Side را در Page Load فراخوانی می کنیم و تکه بر جادوی setTimeout برای بازیابی اطلاعات مورد نیازمان ، میزنیم .
نقاط کلیدی :
متدهای Code Behind باید فقط Static باشند . بدین دلیل که Client Side فقط بتواند آنها را بخواند .
- ASP.net
- 2k بازدید
- 3 تشکر