روشی که در مطلب جاری توصیه شده (اتصال و مدیریت تمام رخدادگردانها در سطح document)، در حالت عمومی بهتر است استفاده نشود و به همین جهت متد live را بازنشسته اعلام کردند؛ چون متد live هم تمام رخدادگردانها را در سطح document مدیریت میکرد و کارآیی خوبی نداشت. از این جهت که زمانیکه تعداد زیادی سلکتور در سطح document قرار هست رخدادگردانی شوند (یک برنامهی واقعی متشکل هست از بررسی و تعریف تعداد زیادی سلکتور)، هر رخداد انتشار یافته به سطحی بالاتر هم در اینجا باید با تمام سلکتورهای موجود مقایسه و اعتبارسنجی شود که آیا مرتبط به آن هست یا خیر. این کار، با تعداد اشیاء بالای در یک صفحه و استفادهی گستردهی از jQuery خیلی کند هست. برای مطالعهی بیشتر
نظرات مطالب
استفاده از Froala WYSIWYG Editor در ASP.NET
در مثالی که پیوست شد، از فایل jquery.unobtrusive-ajax استفاده نشدهاست. ابتدا این فایل را اضافه کنید:
بعد مدخل تعریف آن هم باید به فایل _Layout.cshtml اضافه شود:
به این ترتیب Ajax.BeginForm کار خواهد کرد (آزمایش شد).
PM> Install-Package Microsoft.jQuery.Unobtrusive.Ajax
<script src="~/Scripts/jquery-1.10.2.min.js"></script> <script src="~/Scripts/jquery.validate.min.js"></script> <script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script> <script src="~/Scripts/jquery.validate.unobtrusive.min.js"></script>
این روش عمومی است و با jqGrid هم امتحان شد، کار میکند:
در این حالت فرقی نمیکند که از چه ابزاری برای ارسال اطلاعات به سرور استفاده میکنید. همینقدر که در پشت صحنه از jQuery Ajax استفاده میکند، رخداد ajaxSend آن هوک شده و پارامترهای لازم، به اطلاعات ارسالی به سرور اضافه میشوند.
$(document).ready(function () { var securityToken = $('[name=__RequestVerificationToken]').val(); $('body').bind('ajaxSend', function (elm, xhr, s) { if (s.type == 'POST' && typeof securityToken != 'undefined') { if (s.data.length > 0) { s.data += "&__RequestVerificationToken=" + encodeURIComponent(securityToken); } else { s.data = "__RequestVerificationToken=" + encodeURIComponent(securityToken); } } }); });
یک تجربه :
این سلکتور $(this).attr('value')
برای کار با value در Option نال برمیگردوند و من من اینجوری استفاده کردم$('#Cities').change(function () { jQuery.getJSON('@Url.Action("SelectTown")', { id: $(this).val() }, function (data) { $('#Towns').empty(); jQuery.each(data, function (i) { var option = $('<option></option>').val(data[i].ID).text(data[i].Name); $("#Towns").append(option); }); }); });
منظورم استفاده از .val به جای .attr('value') هستش.
نمیدونم شاید بخاطر نسخه جدیدتر Jquery هست.سلام؛ من پروژه لوسین رو که شما ضمیمه کرده بودین توبخش استفاده از AutoComplete Jquery هم دانلود کردم و عین همونا رو پیاده کردم و همه چیز داره خوب کار میکنه. منتها شما اونجا چند تا post رو یک جا به لوسین دادین تا ایندکس کنه و لوسین هم برای همشون یه فایل میسازه . اما من که هر چند وقت یه بار تو سایت یه مطلبو ایندکس میکنم برای هر کدوم یه فایل ساخته و خب اگه تعداد مطلبام زیاد باشه این همینجور برای همشون تو دایرکتوری خودش فایلهای یک کیلو بایتی میسازه . ِایا این درسته؟ نمیدونم مشکل از کجاست! اگه میشه راهنمایی کنین....
نظرات مطالب
Image Annotations
- اگر دقت کرده باشید در کدهای فوق این متدها استاتیک تعریف شدن، یعنی مراحل چرخه طول عمر یک صفحه به آنها اعمال نشده و اصلا جزئی از مباحث اعتبارسنجی صفحه جاری لحاظ نخواهند شد.
- در وب فرمها استفاده از وب متدها یک روش برای کار با jQuery Ajax است. روش دوم استفاده از Generic handlerها و فایلهای ashx است. در این موارد به علت استاتیک نبودن handlerهای تولیدی، میشود همه نوع اعتبارسنجی رو اعمال کرد اعم از روش Forms Authentication مثلا توسط context.Request.IsAuthenticated یا حتی روش منسوخ شده استفاده از سشنها برای اعتبارسنجی با پیاده سازی IRequiresSessionState.
- در مطلب فوق اصلا از MS Ajax استفاده نشده. اون هم جایگاه خودش رو در کاربردهای خاص خودش دارد.
- در وب فرمها استفاده از وب متدها یک روش برای کار با jQuery Ajax است. روش دوم استفاده از Generic handlerها و فایلهای ashx است. در این موارد به علت استاتیک نبودن handlerهای تولیدی، میشود همه نوع اعتبارسنجی رو اعمال کرد اعم از روش Forms Authentication مثلا توسط context.Request.IsAuthenticated یا حتی روش منسوخ شده استفاده از سشنها برای اعتبارسنجی با پیاده سازی IRequiresSessionState.
- در مطلب فوق اصلا از MS Ajax استفاده نشده. اون هم جایگاه خودش رو در کاربردهای خاص خودش دارد.
بدلیل سازگاری مناسب با کتابخانه JQuery افزونه FarsiInput را بهتر از FarsiType ارزیابی میکنم.
همچنین FarsiType قابلیت هایی دارد که پیشنهاد میکنم به FarsiInput اضافه شود. برای مثال تغییر Direction که کار آسانی است و همچنین تغییر زبان با ctrl + Space.
غیرفعال شدن در صورتی که صفحه کلید فارسی است، پیشنهاد نمیشود چرا که نیاز مبرمی به جاینشینی حروف عربی مورد نیاز است.
در کل FarsiInput سبکتر است و آینده بهتری را برای آن میتوان متصور شد. همانطور که یکی دیگر از دوستان اشاره کردند این افزونه بیش از حد کاربردی است. مخصوصاً در برنامههای کاربردی تحت وب!
با تشکر از وحید نصیری و همچنین کاوه احمدی برای همه تلاششان.
دوست عزیز
بحث ما در مورد توانایی انجام موارد فوق الذکر بود. نه اینکه حالا چون ...
به تواناییهای MVC شکی نیست.مسئله اصلی اینه که آیا پست جاری را میتوان به راحتی با WebPage و یا WebForm انجام داد؟!
چه از طریق قابلیتهای ASP.NET Web Form و ASP.NET Web Page راحته.
استفاده از Razor چه از طریق Jquery و یا Iframe (نظر قبلی)و یا به طور مستقل و یا روشهای دیگر در ASP.NET Web Form و ASP.NET Web Page
و استفاده معمولی با تواناییهای DataBind
یا بطور کامل از Razor View Engine در Web Page
در نهایت کار سختی نیست.
بحث ما در مورد توانایی انجام موارد فوق الذکر بود. نه اینکه حالا چون ...
به تواناییهای MVC شکی نیست.مسئله اصلی اینه که آیا پست جاری را میتوان به راحتی با WebPage و یا WebForm انجام داد؟!
چه از طریق قابلیتهای ASP.NET Web Form و ASP.NET Web Page راحته.
استفاده از Razor چه از طریق Jquery و یا Iframe (نظر قبلی)و یا به طور مستقل و یا روشهای دیگر در ASP.NET Web Form و ASP.NET Web Page
و استفاده معمولی با تواناییهای DataBind
یا بطور کامل از Razor View Engine در Web Page
در نهایت کار سختی نیست.
نظرات مطالب
Highlight کردن لینک صفحه جاری در ASP.NET MVC
ممنون. مطلب جالبی است. یک راه حل عمومی دیگر مبتنی بر jQuery :
این روش بر اساس آدرس صفحه جاری و یافتن آن در ناحیه headermenu و سپس رنگی کردن آن کار میکند.
//--------------انتخاب خودکار لینکهای بالای صفحه به ازای صفحه جاری $(document).ready(function () { $("#headermenu a").each(function () { var $a = $(this); var href = $a.attr("href"); if (href && (location.pathname.toLowerCase() == href.toLowerCase())) { //صفحه جاری را یافتیم $a.css({ "color": "Yellow", "border-bottom": "1px solid" }); } }); });
در وب فرمها:
- یک TextBox را به صفحه اضافه کنید. TextMode آن باید MultiLine باشد تا تبدیل به TextArea شود. همچنین ClientID آنرا هم مقدار دهی کنید تا بشود در jQuery ازش استفاده کرد.
- تمام توضیحات یکی است با این تفاوت که:
الف) return Content در اینجا میشود Response.Write
ب) بجای کنترلر شما از یک http handler میتونید استفاده کنید (فایلهای ashx معروف)
در اینجا context.Request.Files امکان دسترسی به فایلهای آپلود شده را میدهد.
آنها را ذخیره کنید. در آخر کار هم با context.Response.Write مواردی را که در مقاله فوق توضیح داده شد، بازگشت دهید.
- یک TextBox را به صفحه اضافه کنید. TextMode آن باید MultiLine باشد تا تبدیل به TextArea شود. همچنین ClientID آنرا هم مقدار دهی کنید تا بشود در jQuery ازش استفاده کرد.
- تمام توضیحات یکی است با این تفاوت که:
الف) return Content در اینجا میشود Response.Write
ب) بجای کنترلر شما از یک http handler میتونید استفاده کنید (فایلهای ashx معروف)
public class Upload : IHttpHandler { public void ProcessRequest (HttpContext context) { HttpPostedFile uploads = context.Request.Files["upload"]; //... save the file // return context.Response.Write(...) // and then context.Response.End();
آنها را ذخیره کنید. در آخر کار هم با context.Response.Write مواردی را که در مقاله فوق توضیح داده شد، بازگشت دهید.