hakim22
پنج شنبه 07 شهریور 1392, 01:38 صبح
دانلود فایل پروژه به همراه متن کامل مقاله به صورت PDF (http://s3.picofile.com/file/7912974622/ASP_MVC_AJAX_1.rar.html)
AJAX چیست ؟
این کلمه مخفف عبارت asynchronous JavaScript and XML می باشد. این یعنی از جاوا اسکریپت و XML به صورت نامگام استفاده کنیم. منظور از ناهمگام بودن این است که درخواست شما به سرور ارسال میشود و بلافاصله به کاربر(Client) برگشت میکند. در این لحظه کاربر میتواند کار خود را در صفحه ی وب ادامه دهد. به محض اینکه پیامی از سمت سرور در پاسخ به درخواست دریافت شود مرورگر آن را به صفحه ی وب اطلاع میدهد.
کاربردها
درحالت معمول بعد از هر درخواست (Request) صفحه ی مرورگر تازه (Refresh) میوشد. برای صفحات کم حجم ممکن است زیاد به نظر نرسد. اما در صفحه های شلوغ این کار برای چند لحظه ارتباط کاربر با صفحه ی وب را مختل میکند. AJAX باعث میشود بروز رسانی صفحه در پس زمینه صورت گیرد و کار کاربر نرم ادامه پیدا کند.
در خیلی از موارد نیاز داریم تنها بخشهایی از صفحه ی وب را بروز کنیم. اگر قرار باشد با هر بار تغییر نتیجه ی بازی فوتبال یا هر بار دریافت پیام همه ی صفحه را بروز کنیم علاوه بر اینکه صفحه در سمت کلایت برای مدتی از دسترس خارج میشود فشار زیادی به سرور وارد میکند. چرا که همه ی اطلاعات باید از نو خوانده شده و به سمت کاربر ارسال شود.
در نهایت AJAX هم سرعت کار با صفحه ی وب را افزایش میدهد و هم بار ترافیکی آن را کم میکند. همچنین طراحی UI را بسیار کاربر پسند تر میکند.
اطلاعات کلی
اول باید بدانید که AJAX برنامه نویسی در سمت Client است و یک قابلیت در جاوا اسکریپت شمرده میشود. اگر شما جاوااسکریپت بلد باشید با هر زبان برنامه نویسی وب میتوانید از AJAX استفاده کنید. برای برنامه نویسی ناهمگام در سمت سرور در ASP از کلاسهای دات نت استفاده میشود.
اگرچه استفاده از jQuery کار کردن با AJAX را بسیار ساده میکند. اما در محیط برنامه نویسی ASP.MVC 4 بهتر است از کمک AJAX یا همان AjaxHelper استفاده کنید. دلیل اول این است که کد نویسی آن ساده تر است و دلیل دوم این است که فریم ورک jquery.unobtrusive-ajax.js خودش همه ی کدهای جاوا اسکریپت مورد نیاز را در صفحه درج میکند و نیاز به نوشتن کدهای جاوا اسکریپت را به حداقل میرساند.
AJAX میتواند در پاسخ به رویداد Submit یک فرم یا کلیک روی یک عکس یا حرکت موس فعال شود. در این مورد محدویتی وجود ندارد.
برنامه ی نمونه
در برنامه ی نمونه تلاش میکنیم یک سیستم نظر دهی به مطلب برای یک سایت ساده طراحی کنیم. دقت کنید که برای ساده سازی سایت تنها شامل یک مطلب است و اطلاعات نظر ها بعد از ارسال به سرور در یک لیست ذخیره میشود. در صورتی که صفحه را refresh کنید پاک خواهد شد. هدف از این پروژه نمایش سیکل رفت و برگشت داده و اثبات این قضیه که صفحه به طور کامل بروز نمیشود بوده است. در ادامه تصویر سایت را مشاهده می کنید :
109850
میبینید مطلبی داریم که که قبلا دو کاربر درباره ی آن نظر ثبت کرده اند. در قسمت درج نظر یک فرم وجود دارد که شما میتوانید با وارد کردن اطلاعات و زدن دکمه ی ثبت نظر جدید ثبت کنید. سرور به محض دریافت اطلاعات فرم، آن را در بانک ذخیره میکند و نتیجه را دوباره به کاربر (کلاینت) برگشت میدهد. این اطلاعات برگشتی میتواند هر چیزی باشد( مثلا پیامی که اعلام کند اطلاعات در سرور ثبت شده است). در اینجا ما عین نظر ثبت شده را به انتهای لیست نظرات قبلی اضافه می کنیم.
جادو چگونه اتفاق می افتد !؟
برای پیاده سازی این فرم در ساده ترین حالت ابتدا به یک کنترلر نیاز دارید . این کنترلر با نام Home دارای یک اکشن با نام Index است و صفحه ای که مطلب در آن قرار دارد را نمایش میدهد. این اکشن نظراتی که قبلا در مورد مطلب در بانک ثبت شده است را در می آورد و سپس آنها را در قابل یک مدل به View اصلی با نام Index منتقل می کند. تا اینجای کار هیچ ربطی به AJAX ندارد و شما فقط دارید عصای جادوگری را دستانتان تاب میدهید.
حالا به View رفته و کدهای آن قسمت را پیاده می کنیم. میتوانید آن را با استفاده از گزینه ی Scafold template روی حالت Edit خیلی سریع باز سازی کنید.
109849
اگر هم دستی View را پیاده می کنید یادتان باشد که مدلی که برای ثبت اطلاعات فرم به آن نیاز دارید در بالای صفحه مشخص کنید
@model MyBlog.Web.Models.Comment
سپس عنوان صفحه ، عنوان مطلب و محتویات مطلب نمایش داده میشود.
<h2>خوش آمدید</h2>
<p style="font-weight: bold; color: maroon">
آشنایی با Ajax در ASP.MVC
</p>
<p style="border: 1px solid black; width: 400px; word-wrap: break-word; margin: 10px; padding: 10px;">
AJAX چیست ؟
این کلمه مخفف عبارت asynchronous JavaScript and XML می باشد. این یعنی از جاوا اسکریپت و XML به صورت نامگام استفاده کنیم. منظور از ناهمگام بودن این است که درخواست شما به سرور ارسال میشود و بلافاصله به کاربر(Client) برگشت میکند. در این لحظه کاربر میتواند کار خود را در صفحه ی وب ادامه دهد. به محض اینکه پیامی از سمت سرور در پاسخ به درخواست دریافت شود مرورگر آن را به صفحه ی وب اطلاع میدهد.
</p>
سپس قسمت نظرات قرار میگیرد. برای خواندن اطلاعات نظرها چندین روش وجود دارد. ساده ترین روش این است که نظرات را در کنترلر Home و در اکشن Index که همین صفحه را نمایش میدهد بخوانید و درون یک ViewBag ذخیره کنید. بعد این اطلاعات را در صفحه نمایش دهید.
@{
IEnumerable<MyBlog.Web.Models.Comment> comments;
comments = ViewBag.comments;
}
<p>نظرات </p>
<div id="comments" style="border: 1px solid maroon; width: 400px; margin: 10px; padding: 10px;">
@foreach (var item in comments)
{
@Html.Partial("_Comment", item);
}
</div>
دقت کنید که خود نظرات در قالب یک PartialView قرار میگیرند و سپس نمایش داده میشوند. محتویان این View به صورت زیر است :
@model MyBlog.Web.Models.Comment
<div id="comment" style="border-bottom :1px solid steelblue;width:400px; padding:10px 0">
@Html.DisplayNameFor(model => model.Name)
<text>:</text>
@Html.DisplayFor(model => model.Name)
<div class="display-label">
@Html.DisplayNameFor(model => model.Email)
<text>:</text>
@Html.DisplayFor(model => model.Email)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Text)
<text>:</text>
@Html.DisplayFor(model => model.Text)
</div>
</div>
این View با درون یک فایل مجزا با نام _comment.cs در فولدر Home ذخیره میشود. از کاراکتر زیر خط (_) برای مشخص کردین اینکه ویو به صورت PartialView است استفاده شده و الزامی ندارد.
برنامه وقتی در حلقه به خط @Html.Partial("_Comment", item) میرسد ایم آن را با اطلاعات item پر میکند و نتیجه در ویو درج میشود.
تا اینجای کار هم از AJAX هیچ استفاده ای نشده است. نمایش لیست نظرات سایت هنگامی صورت میگیرد که صفحه برای اولین بار درحال بارگذاری است.
در اینجا میتوانید نظر را با استفاده از یک فرم ساده و کمک Html.BeginForm بسازید. فرم بعد از Submit شدن به سرور میرود و نتیجه نیز به سمت کاربر برگشت داده میشود. اما این عمل باعث تازه شدن کل صفحه میشود که منجر به بازخوانی دوباره ی همه ی نظرات و سپس اجرای دوبارهی همه ی مراحل قبل میشود.(در این برنامه ی نمونه چون اطلاعات درون کلاس کنترل ذخیره میشود و نه در بانک یا فایل بعد از Refresh شدن پاک میشود و شما نظر ارسالی را نمی بینید.)
@using (Html.BeginForm("submitComment"))
بجای اینکار میتوانید از Ajax.BeginForm استفاده کنید . در این صورت مطلب به سرور ارسال میشود و سرور تنها اطلاعات آخرین نظر ارسالی به Client باز میگرداند و تنها همین اطلاعات در انتهای لیست نظرات درج میشود.
در ساده ترین طراحی نمونه ی کد Ajax در ASP.MVC4 به صورت زیر است :
@using (Ajax.BeginForm("submitComment",
"Home",
new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "comments"
}
))
اولین آرگومان ورودی به این دستور نام اکشنی است که میخواهید اطلاعات به آن ارسال شود. که در اینجا اکشنی با نام SubmitComment است. آرگومان دوم نام کنترلری است که اکشن در آن قرار دارد. اگر اکشن SubmitComment درون همان کنترلری قرار داشته باشد که این صفحه از آن اجرا شده باشد نوشتن آن نیاز نیست. در اینجا اکشن Index که صفحه را نمایش میدهد با SubmitComment هر دو در کنترلر Home قرار دارند.
مهمترین قسمت در دستور Ajax مربوط به AjaxOptions میشود. در اینجا متد Http برای ارسال داده ها انتخاب میشود. میتوانید از GET هم استفاده کنید.
قسمت InsertionMode به مرورگر میگوید که با اطلاعاتی که بعدا از سرور بازگشت داده میشود چه کند. اگر آن را روی InsertAfter تنظیم کرده باشید اطلاعات بازگشتی بعد از تگ
<div id="comments">
...
</div>
درج میشوند. آدرس تگی که میخواهید آپدیت کنید در گزینه ی UpdateTargetId مشخص میکنید.
بهتر است در اینجا مطمئن شوید که در _Layout مربوط به پروژه یا در همین صفحه اسکریپت مربوط به Ajax را بارگذاری کرده اید .
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
معمولا وقتی از Scafold Template استفاده میکنید خودش آدرس دهی به اسکریپت را از طریق اضافه کردن کد زیر به انتهاب View انجام میدهد.
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
سایر اطلاعات فرم به صورت زیر است :
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset style="width: 400px;">
<legend>درج نظر</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
سایر input ها برای دریافت اطلاعات مدل و ارسال آن به سرور...
<p>
<input type="submit" value="ثبت" />
</p>
</fieldset>
}
بعد از آنکه دکمه ی ثبت زده میشود اطلاعات در قالب یک درخواست post اما در حالت Ajax به سرور ارسال میشود. اکشنی که درخواست را دریافت میکند با نام SubmitComment مشخص شده است.
public ActionResult SubmitComment(Models.Comment model)
{
// TODO : save model to a database
return PartialView("_Comment", model);
}
در اینجا نظرثبت شده توسط کاربر در سمت Client به سرور میرسد. سرور نوع آن را تشخیص میدهد و مقدارش را درون متغیر model میریزد. سپس شما میتوانید اطلاعات دریافتی را در بانک اطلاعاتی ذخیره کنید. یا هرکاری که دلتان میخواهد ! با آن بکنید.
در گام بعد ما همان مدل دریافتی را مستقیما به PartialView که قبلا با نام _Comment ساخته بودیم منتقل می کنیم. موتور razor محتوای HTML را میسازد و آن را به AJAX در سمت کاربر ارسال می کند. در سمت کاربر وقتی محتوای نظر به صورت HTML دریافت شد آن را بعد از تگ با آیدی Comment درج می کند.
109851
بلافاصله بعد از اینکه نظر به سرور انتقال داده شد شما میتوانید یک نظر جدید دیگر از طریق فرم ثبت کنید. چیزی شبیه ارسال نظرات در سایتهایی مانند Facebook یا خیلی سایتهای دیگر.
در قسمت Network از Developer Tools در مرورگر IE که با کلید F12 فعال میشود میتوانید رویداد های شبکه را بررسی کنید. در اینجا بعد از زده شدن دکمه ی ثبت و submit شدن فرم یک Request از نوع POST به سرور انتقال داده میشود. در اینجا پروژه ما به پایان میرسد. و یک سیکل کامل از کار با AJAX را پیاده سازی کردیم.
مدل نظر به صورت زیر است.
public class Comment
{ public int Id { get; set; }
[DisplayName("نام")]
public string Name { get; set; }
[DisplayName("ایمیل")]
public string Email { get; set; }
[DisplayName("نظر")]
public string Text { get; set; }
}
نکته ی آخر اینکه چنانچه کاربر جاوا اسکریپتش را غیر فعال کند فرم کار خواهد کرد ولی اطلاعات برگشتی بجای همه ی اطلاعات قبلی در صفحه قرار میگیرد و به طور کامل Replace میشود. برای مدل کردن این کار میتوانید از Developer tools در IE و منوی Disable استفاده کنید.
در سمت سرور میتوانید این حالت را با استفاده از متد Request.IsAjaxRequest() تشخیص دهید. چون ممکن از یک اکشن هم برای حالت Ajax هم برای حالت همگام استفاده شود با استفاده از یک شرط این قضیه در سمت سرور بررسی میشود.
public ActionResult SubmitComment(Models.Comment model)
{
// TODO : save model to a database
if (Request.IsAjaxRequest())
{
return PartialView("_Comment", model);
}
else
{
//--- TODO: If not ajax call
}
}
پایان مقاله
دانلود فایل پروژه به همراه متن کامل مقاله به صورت PDF (http://s3.picofile.com/file/7912974622/ASP_MVC_AJAX_1.rar.html)
AJAX چیست ؟
این کلمه مخفف عبارت asynchronous JavaScript and XML می باشد. این یعنی از جاوا اسکریپت و XML به صورت نامگام استفاده کنیم. منظور از ناهمگام بودن این است که درخواست شما به سرور ارسال میشود و بلافاصله به کاربر(Client) برگشت میکند. در این لحظه کاربر میتواند کار خود را در صفحه ی وب ادامه دهد. به محض اینکه پیامی از سمت سرور در پاسخ به درخواست دریافت شود مرورگر آن را به صفحه ی وب اطلاع میدهد.
کاربردها
درحالت معمول بعد از هر درخواست (Request) صفحه ی مرورگر تازه (Refresh) میوشد. برای صفحات کم حجم ممکن است زیاد به نظر نرسد. اما در صفحه های شلوغ این کار برای چند لحظه ارتباط کاربر با صفحه ی وب را مختل میکند. AJAX باعث میشود بروز رسانی صفحه در پس زمینه صورت گیرد و کار کاربر نرم ادامه پیدا کند.
در خیلی از موارد نیاز داریم تنها بخشهایی از صفحه ی وب را بروز کنیم. اگر قرار باشد با هر بار تغییر نتیجه ی بازی فوتبال یا هر بار دریافت پیام همه ی صفحه را بروز کنیم علاوه بر اینکه صفحه در سمت کلایت برای مدتی از دسترس خارج میشود فشار زیادی به سرور وارد میکند. چرا که همه ی اطلاعات باید از نو خوانده شده و به سمت کاربر ارسال شود.
در نهایت AJAX هم سرعت کار با صفحه ی وب را افزایش میدهد و هم بار ترافیکی آن را کم میکند. همچنین طراحی UI را بسیار کاربر پسند تر میکند.
اطلاعات کلی
اول باید بدانید که AJAX برنامه نویسی در سمت Client است و یک قابلیت در جاوا اسکریپت شمرده میشود. اگر شما جاوااسکریپت بلد باشید با هر زبان برنامه نویسی وب میتوانید از AJAX استفاده کنید. برای برنامه نویسی ناهمگام در سمت سرور در ASP از کلاسهای دات نت استفاده میشود.
اگرچه استفاده از jQuery کار کردن با AJAX را بسیار ساده میکند. اما در محیط برنامه نویسی ASP.MVC 4 بهتر است از کمک AJAX یا همان AjaxHelper استفاده کنید. دلیل اول این است که کد نویسی آن ساده تر است و دلیل دوم این است که فریم ورک jquery.unobtrusive-ajax.js خودش همه ی کدهای جاوا اسکریپت مورد نیاز را در صفحه درج میکند و نیاز به نوشتن کدهای جاوا اسکریپت را به حداقل میرساند.
AJAX میتواند در پاسخ به رویداد Submit یک فرم یا کلیک روی یک عکس یا حرکت موس فعال شود. در این مورد محدویتی وجود ندارد.
برنامه ی نمونه
در برنامه ی نمونه تلاش میکنیم یک سیستم نظر دهی به مطلب برای یک سایت ساده طراحی کنیم. دقت کنید که برای ساده سازی سایت تنها شامل یک مطلب است و اطلاعات نظر ها بعد از ارسال به سرور در یک لیست ذخیره میشود. در صورتی که صفحه را refresh کنید پاک خواهد شد. هدف از این پروژه نمایش سیکل رفت و برگشت داده و اثبات این قضیه که صفحه به طور کامل بروز نمیشود بوده است. در ادامه تصویر سایت را مشاهده می کنید :
109850
میبینید مطلبی داریم که که قبلا دو کاربر درباره ی آن نظر ثبت کرده اند. در قسمت درج نظر یک فرم وجود دارد که شما میتوانید با وارد کردن اطلاعات و زدن دکمه ی ثبت نظر جدید ثبت کنید. سرور به محض دریافت اطلاعات فرم، آن را در بانک ذخیره میکند و نتیجه را دوباره به کاربر (کلاینت) برگشت میدهد. این اطلاعات برگشتی میتواند هر چیزی باشد( مثلا پیامی که اعلام کند اطلاعات در سرور ثبت شده است). در اینجا ما عین نظر ثبت شده را به انتهای لیست نظرات قبلی اضافه می کنیم.
جادو چگونه اتفاق می افتد !؟
برای پیاده سازی این فرم در ساده ترین حالت ابتدا به یک کنترلر نیاز دارید . این کنترلر با نام Home دارای یک اکشن با نام Index است و صفحه ای که مطلب در آن قرار دارد را نمایش میدهد. این اکشن نظراتی که قبلا در مورد مطلب در بانک ثبت شده است را در می آورد و سپس آنها را در قابل یک مدل به View اصلی با نام Index منتقل می کند. تا اینجای کار هیچ ربطی به AJAX ندارد و شما فقط دارید عصای جادوگری را دستانتان تاب میدهید.
حالا به View رفته و کدهای آن قسمت را پیاده می کنیم. میتوانید آن را با استفاده از گزینه ی Scafold template روی حالت Edit خیلی سریع باز سازی کنید.
109849
اگر هم دستی View را پیاده می کنید یادتان باشد که مدلی که برای ثبت اطلاعات فرم به آن نیاز دارید در بالای صفحه مشخص کنید
@model MyBlog.Web.Models.Comment
سپس عنوان صفحه ، عنوان مطلب و محتویات مطلب نمایش داده میشود.
<h2>خوش آمدید</h2>
<p style="font-weight: bold; color: maroon">
آشنایی با Ajax در ASP.MVC
</p>
<p style="border: 1px solid black; width: 400px; word-wrap: break-word; margin: 10px; padding: 10px;">
AJAX چیست ؟
این کلمه مخفف عبارت asynchronous JavaScript and XML می باشد. این یعنی از جاوا اسکریپت و XML به صورت نامگام استفاده کنیم. منظور از ناهمگام بودن این است که درخواست شما به سرور ارسال میشود و بلافاصله به کاربر(Client) برگشت میکند. در این لحظه کاربر میتواند کار خود را در صفحه ی وب ادامه دهد. به محض اینکه پیامی از سمت سرور در پاسخ به درخواست دریافت شود مرورگر آن را به صفحه ی وب اطلاع میدهد.
</p>
سپس قسمت نظرات قرار میگیرد. برای خواندن اطلاعات نظرها چندین روش وجود دارد. ساده ترین روش این است که نظرات را در کنترلر Home و در اکشن Index که همین صفحه را نمایش میدهد بخوانید و درون یک ViewBag ذخیره کنید. بعد این اطلاعات را در صفحه نمایش دهید.
@{
IEnumerable<MyBlog.Web.Models.Comment> comments;
comments = ViewBag.comments;
}
<p>نظرات </p>
<div id="comments" style="border: 1px solid maroon; width: 400px; margin: 10px; padding: 10px;">
@foreach (var item in comments)
{
@Html.Partial("_Comment", item);
}
</div>
دقت کنید که خود نظرات در قالب یک PartialView قرار میگیرند و سپس نمایش داده میشوند. محتویان این View به صورت زیر است :
@model MyBlog.Web.Models.Comment
<div id="comment" style="border-bottom :1px solid steelblue;width:400px; padding:10px 0">
@Html.DisplayNameFor(model => model.Name)
<text>:</text>
@Html.DisplayFor(model => model.Name)
<div class="display-label">
@Html.DisplayNameFor(model => model.Email)
<text>:</text>
@Html.DisplayFor(model => model.Email)
</div>
<div class="display-label">
@Html.DisplayNameFor(model => model.Text)
<text>:</text>
@Html.DisplayFor(model => model.Text)
</div>
</div>
این View با درون یک فایل مجزا با نام _comment.cs در فولدر Home ذخیره میشود. از کاراکتر زیر خط (_) برای مشخص کردین اینکه ویو به صورت PartialView است استفاده شده و الزامی ندارد.
برنامه وقتی در حلقه به خط @Html.Partial("_Comment", item) میرسد ایم آن را با اطلاعات item پر میکند و نتیجه در ویو درج میشود.
تا اینجای کار هم از AJAX هیچ استفاده ای نشده است. نمایش لیست نظرات سایت هنگامی صورت میگیرد که صفحه برای اولین بار درحال بارگذاری است.
در اینجا میتوانید نظر را با استفاده از یک فرم ساده و کمک Html.BeginForm بسازید. فرم بعد از Submit شدن به سرور میرود و نتیجه نیز به سمت کاربر برگشت داده میشود. اما این عمل باعث تازه شدن کل صفحه میشود که منجر به بازخوانی دوباره ی همه ی نظرات و سپس اجرای دوبارهی همه ی مراحل قبل میشود.(در این برنامه ی نمونه چون اطلاعات درون کلاس کنترل ذخیره میشود و نه در بانک یا فایل بعد از Refresh شدن پاک میشود و شما نظر ارسالی را نمی بینید.)
@using (Html.BeginForm("submitComment"))
بجای اینکار میتوانید از Ajax.BeginForm استفاده کنید . در این صورت مطلب به سرور ارسال میشود و سرور تنها اطلاعات آخرین نظر ارسالی به Client باز میگرداند و تنها همین اطلاعات در انتهای لیست نظرات درج میشود.
در ساده ترین طراحی نمونه ی کد Ajax در ASP.MVC4 به صورت زیر است :
@using (Ajax.BeginForm("submitComment",
"Home",
new AjaxOptions
{
HttpMethod = "POST",
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId = "comments"
}
))
اولین آرگومان ورودی به این دستور نام اکشنی است که میخواهید اطلاعات به آن ارسال شود. که در اینجا اکشنی با نام SubmitComment است. آرگومان دوم نام کنترلری است که اکشن در آن قرار دارد. اگر اکشن SubmitComment درون همان کنترلری قرار داشته باشد که این صفحه از آن اجرا شده باشد نوشتن آن نیاز نیست. در اینجا اکشن Index که صفحه را نمایش میدهد با SubmitComment هر دو در کنترلر Home قرار دارند.
مهمترین قسمت در دستور Ajax مربوط به AjaxOptions میشود. در اینجا متد Http برای ارسال داده ها انتخاب میشود. میتوانید از GET هم استفاده کنید.
قسمت InsertionMode به مرورگر میگوید که با اطلاعاتی که بعدا از سرور بازگشت داده میشود چه کند. اگر آن را روی InsertAfter تنظیم کرده باشید اطلاعات بازگشتی بعد از تگ
<div id="comments">
...
</div>
درج میشوند. آدرس تگی که میخواهید آپدیت کنید در گزینه ی UpdateTargetId مشخص میکنید.
بهتر است در اینجا مطمئن شوید که در _Layout مربوط به پروژه یا در همین صفحه اسکریپت مربوط به Ajax را بارگذاری کرده اید .
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
معمولا وقتی از Scafold Template استفاده میکنید خودش آدرس دهی به اسکریپت را از طریق اضافه کردن کد زیر به انتهاب View انجام میدهد.
@section Scripts {
@Scripts.Render("~/bundles/jqueryval")
}
سایر اطلاعات فرم به صورت زیر است :
{
@Html.AntiForgeryToken()
@Html.ValidationSummary(true)
<fieldset style="width: 400px;">
<legend>درج نظر</legend>
<div class="editor-label">
@Html.LabelFor(model => model.Name)
</div>
<div class="editor-field">
@Html.EditorFor(model => model.Name)
@Html.ValidationMessageFor(model => model.Name)
</div>
سایر input ها برای دریافت اطلاعات مدل و ارسال آن به سرور...
<p>
<input type="submit" value="ثبت" />
</p>
</fieldset>
}
بعد از آنکه دکمه ی ثبت زده میشود اطلاعات در قالب یک درخواست post اما در حالت Ajax به سرور ارسال میشود. اکشنی که درخواست را دریافت میکند با نام SubmitComment مشخص شده است.
public ActionResult SubmitComment(Models.Comment model)
{
// TODO : save model to a database
return PartialView("_Comment", model);
}
در اینجا نظرثبت شده توسط کاربر در سمت Client به سرور میرسد. سرور نوع آن را تشخیص میدهد و مقدارش را درون متغیر model میریزد. سپس شما میتوانید اطلاعات دریافتی را در بانک اطلاعاتی ذخیره کنید. یا هرکاری که دلتان میخواهد ! با آن بکنید.
در گام بعد ما همان مدل دریافتی را مستقیما به PartialView که قبلا با نام _Comment ساخته بودیم منتقل می کنیم. موتور razor محتوای HTML را میسازد و آن را به AJAX در سمت کاربر ارسال می کند. در سمت کاربر وقتی محتوای نظر به صورت HTML دریافت شد آن را بعد از تگ با آیدی Comment درج می کند.
109851
بلافاصله بعد از اینکه نظر به سرور انتقال داده شد شما میتوانید یک نظر جدید دیگر از طریق فرم ثبت کنید. چیزی شبیه ارسال نظرات در سایتهایی مانند Facebook یا خیلی سایتهای دیگر.
در قسمت Network از Developer Tools در مرورگر IE که با کلید F12 فعال میشود میتوانید رویداد های شبکه را بررسی کنید. در اینجا بعد از زده شدن دکمه ی ثبت و submit شدن فرم یک Request از نوع POST به سرور انتقال داده میشود. در اینجا پروژه ما به پایان میرسد. و یک سیکل کامل از کار با AJAX را پیاده سازی کردیم.
مدل نظر به صورت زیر است.
public class Comment
{ public int Id { get; set; }
[DisplayName("نام")]
public string Name { get; set; }
[DisplayName("ایمیل")]
public string Email { get; set; }
[DisplayName("نظر")]
public string Text { get; set; }
}
نکته ی آخر اینکه چنانچه کاربر جاوا اسکریپتش را غیر فعال کند فرم کار خواهد کرد ولی اطلاعات برگشتی بجای همه ی اطلاعات قبلی در صفحه قرار میگیرد و به طور کامل Replace میشود. برای مدل کردن این کار میتوانید از Developer tools در IE و منوی Disable استفاده کنید.
در سمت سرور میتوانید این حالت را با استفاده از متد Request.IsAjaxRequest() تشخیص دهید. چون ممکن از یک اکشن هم برای حالت Ajax هم برای حالت همگام استفاده شود با استفاده از یک شرط این قضیه در سمت سرور بررسی میشود.
public ActionResult SubmitComment(Models.Comment model)
{
// TODO : save model to a database
if (Request.IsAjaxRequest())
{
return PartialView("_Comment", model);
}
else
{
//--- TODO: If not ajax call
}
}
پایان مقاله
دانلود فایل پروژه به همراه متن کامل مقاله به صورت PDF (http://s3.picofile.com/file/7912974622/ASP_MVC_AJAX_1.rar.html)