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

چهارشنبه 17 آذر 1395

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

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

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

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید