اشتراکها
کتابخانه Revolution Lightbox
- بله؛ در جائی که قرار هست ترد UI را خالی کنید، مانند مثال «نمایش شرطی عبارات در فایلهای razor.» که مربوط به دریافت اطلاعات از سرویسهای از راه دور است یا ارسال اطلاعات به آنها (که دقیقا معادل اعمال Ajax ای سمت کلاینت هستند)، «نیاز» هست از متدهای async استفاده کنید. علت وجودی دو نگارش sync و async هم در اینجا به ازای هر رویدادگران تعریف شده، به همین دلیل است. متدهای async سمت کلاینت، فقط ترد UI را خالی میکنند، تا UI برنامه در طی این متد رفت و برگشتی به سمت سرور پاسخگو باشد و هنگ کرده به نظر نرسد.
- اینکه چه متدی را باید async تعریف کرد یا نه، مطالعهی مطلب «متدهای async تقلبی» حتی در اینجا هم مفید است.
با سلام؛ من از روش بالا برای بحث اعتبارسنجی و دسترسی به کنترل و اکشن استفاده کردم. اگر کوکی منقضی شودبه صفحه لاگین هدایت میشود. تغییری در برنامه دادم اگر کوکی منقضی شد در همان صفحه جاری پنجرهای به صورت مدال باز شود لاگین را انجام دهد. فرم مدال بصورت ajax سمت سرور میرود هنگام لاگین مدال. برنامه رو دیباگ کردم کوکی را درست میسازد و پر میکند. ولی هنگامی که روی اکشنی کلیک میکنم مقدار کوکی ست نشده خالی هست. عدم دسترسی میدهد. به عبارتی user.Identity.IsAuthenticated رو false بر میگردونه. آیا مشکل درخواستهای اژاکسی میباشد؟ با تشکر
نظرات مطالب
معرفی JSON Web Token
سلام. فکر میکنم مفهوم jwt رو متوجه نشدم. با اینکه تمام سمپل هایی که ارائه کردین رو پیاده سازی کردم. من میخوام یه erp طراحی کنم. که پروژه لاگین و رجیسترش جدا باشه. یعنی هر پروژه ای در این ERP برای لاگین به پروژه لاگین رجیستر ما وصل بشه. همچنین قصد ندارم از angular یا ajax استفاده کنم. برای رفت و آمد بین اکشنها و کنترلرها هم طبق فرمایش شما از httpclient استفاده کردم. ولی باز هم نشد. حالا سوال اینه که برای طراحی این پروژه لاگین رجیستر باید از jwt استفاده بشه؟ و اینکه اگر قرار باشه از jwt استفاده بشه، سادهترین شکل پیاده سازیش چطور خواهد بود؟ سمپل خاصی برای این مسئله دارین؟
در کل باید token ایی به سمت سرور ارسال شود (کاربر اطلاعات ویژهای را به
سمت سرور ارسال کند) تا مشخص شود که درخواست رسیده معتبر هست یا خیر؛ در
غیراینصورت یک درخواست معمولی است که حاوی اطلاعات کاربر ارسال کنندهی آن
نیست. البته الزامی به ارسال این توکن صرفا توسط هدر درخواستهای Ajax ایی
نیست. این مورد (نحوهی تغییر محل ارسال توکن) در قسمت «.... OnMessageReceived برای حالتی است که توکن دریافتی، توسط هدر مخصوص Bearer به سمت سرور ارسال نمیشود...» در متن توضیح داده شدهاست.
در این روش باید به ازای تمامی اکشن متدها یک کنترلر دسترسی تعریف گردد.
حالتی رو در نظر بگیرید که دسترسی ویرایش اطلاعات داده شده و داخل فرم ویرایش اطلاعات اکشن متدی هست که به صورت ajax دراپ دانی رو لود میکند.
اگر برای این اکشن متد دسترسی تعریف نشود خطای 401 صادر میشود.
چطور میشه این مورد رو هندل کرد که با اعطای دسترسی ویرایش، اکشن مورد استفاده در فرم ویرایش کنترلر جاری (SampleController:GetDropdown:) به Claim اضافه شوند بدون اینکه از ذکر صریح این نوع دسترسیها در فرم "تنظیم سطوح دسترسی پویای نقش ها" خودداری کرد؟
بعد از اینکه صفحهی مودال بسته شد، چطور میشود بر اساس نتیجه، موفق یا ناموفق بودن، اطلاعات صفحهی اصلی را بهروز کرد؟ من از روش زیر استفاده کردم. اما PartialView بهروز نمیشود.
و در CONTROLLER:
function LoadCt() { $('#myModal').modal('hide'); $.ajax({ type: "POST", url: "/CONTROLLER/ACTIONMETHOD", data: JSON.stringify(), contentType: "application/json; charset=utf-8", dataType: "html", complete: function (xhr, status) { var data = xhr.responseText; $('cats').html(data); } }); }
public ActionResult ACTIONMETHOD() { var model = stuff from _db; return PartialView("_Get", model); }
نظرات مطالب
پردازش فایلهای XML با استفاده از jQuery
function ReadFlagsOnXml(divControlName, XMLFile) { var div = $("#" + divControlName); console.log($(div).text()); $.ajax({ type: "GET", url: XMLFile, dataType: "xml", success: function(xml) { var xmlDoc = $.parseXML(xml), $xml = $(xmlDoc); console.log(xml); var countries = $(xml).find('Countries'); $(countries).find('Country').each(function() { var countryName = $(this).find('Name').text(); var flagImage = $(this).find('Image').text(); $("<img>", { src: flagImage, title: countryName }).appendTo($(div)); }); } }); }
ممنون. ولی تو تعریف کدهای شما، ردیف رو به عنوان ایدی به تابع حذف میفرسته و با این تابع میشه نوع داده ارسالی رو مشخص کرد
onClickButton: function (e) { var id = $('#grid').jqGrid('getGridParam', 'selrow'); if (id != null) { var idHtml = $('#grid').jqGrid('getCell', id, 'ID_Baker'); //var idHtml = id.ID_Baker; //var idHtml = $('#' + id).children().first().html(); $.ajax({ url: '@(Url.Action("DeleteProfile"))' + '?Id=' + idHtml + '&RowId=' + id, success: function (data) { if (data.Success) { $('#grid').jqGrid('delRowData', data.RowId); } } }); } else { } },