نحوه فراخوانی متد Code Behind در سمت Client

دراین مقاله ، با استفاده از JavaScript و jQuery ، چگونگی فراخوانی متد Code Behind در سمت Client را به شما نمایش خواهیم داد . برای انجام این کار سه راه وجود دارد .

نحوه  فراخوانی متد 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 فقط بتواند آنها را بخواند .