نحوه فراخوانی متد 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
- 1k بازدید
- 3 تشکر