اشتراکها
اشتراکها
پیاده سازی Product Comparison Layout
A basic responsive product grid layout with comparison functionality and a slide-in effect. Demo
من با xamarin studio دارم کار میکنم حالت content برای layout کار رو برای طراحی رابط کاربری خیلی آسون میکنه. مشکلی که من دارم اینه که موقع دسترسی به یه آبجکتی که تو یه layout دیگه هست خطای null دریافت میکنم ولی وقتی با دستور ((StartActivity (typeof(loginActivity اکتیویتی اون layout رو فعال میکنم میتونم دسترسی داشته باشم.
یه سوال کلی اینکه ما برای طراحی کلیت برناممون باید برای هر صفحه یه layout طراحی کنیم و کدهای اون رو تو activity اون بنویسیم؟
یه سوال کلی اینکه ما برای طراحی کلیت برناممون باید برای هر صفحه یه layout طراحی کنیم و کدهای اون رو تو activity اون بنویسیم؟
در Urlها که همین آدرس بالا رو زده بود ولی از اونجا که شما گفتید آدرس درخواستی، قسمتهای مختلف Layout رو چک کردم و خطا رو پیدا کردم و لینک رو صحیح ارسال نکرده بودم که اصلاح شد
متشکرم
متشکرم
- در اینجا هدف نمایش پیامها در صفحه ایی دیگر است.
- پبامها زمانی نمایش داده میشوند که TempData حاوی اطلاعات ارسالی باشد. فراخوانی partial نیز یکبار درون Layout انجام میشود.
نظرات مطالب
ASP.NET MVC #14
بسیار ممنونم که پاسخ دادید. یعنی اینکه بیام در یک پارشال ویوو بخش مربوطه رو قرار بدم و بعدش از Html.RenderAction در layout استفاده کنم؟
نظرات مطالب
ASP.NET MVC #13
با سلام.
در حالت زیر در هنگام submit همواره صفحه رفرش میشود و بعد از رفرش صفحه خطاها را نشان میدهد و
اعتبارسنجی سمت کلاینت کار نمیکند؟
@model Models.Account @{ Layout = null; ViewBag.Title = "ورود به سیستم"; } <script src="@Url.Content("~/Scripts/jquery-1.7.1.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> <script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> @using (Html.BeginForm()) { @Html.ValidationSummary(true) <fieldset> <legend>Login</legend> <table style="font-size: 8pt"> <tr> <td style="width: 100px; text-align: left">نام کاربری :</td> <td>@Html.EditorFor(model => model.Username)</td> </tr> <tr> <td></td> <td style="color: red">@Html.ValidationMessageFor(model => model.Username)</td> </tr> <tr> <td style="width: 100px; text-align: left">کلمه عبور :</td> <td>@Html.EditorFor(model => model.Password)</td> </tr> <tr> <td></td> <td style="color: red">@Html.ValidationMessageFor(model => model.Password)</td> </tr> <tr> <td></td> <td> <input type="submit" value="ورود به سیستم" /></td> </tr> </table> </fieldset> }
public class Account { [Required(ErrorMessage = "نام کاربری باید وارد شود.")] [StringLength(20)] public string Username { get; set; } [Required(ErrorMessage = "کلمه عبور باید وارد شود.")] [DataType(DataType.Password)] public string Password { get; set; } }
[HttpGet] public ActionResult LogOn(string returnUrl) { if (User.Identity.IsAuthenticated) //remember me { if (shouldRedirect(returnUrl)) { return Redirect(returnUrl); } return Redirect(FormsAuthentication.DefaultUrl); } return View(); // show the login page }
[HttpPost] public ActionResult LogOn(Account loginInfo, string returnUrl) { if (this.ModelState.IsValid) { List<User> users = _userService.GetUser(loginInfo.Username, loginInfo.Password); if (users != null && users.Count == 1) { FormsAuthentication.SetAuthCookie(loginInfo.Username,false);// loginInfo.RememberMe); //-- کاربر برنامه ریزی if (users.First().UserType_Id == 1) { return RedirectToAction("Index", "Programming", new { u = loginInfo.Username }); } else if (users.First().UserType_Id == 2) { } else if (users.First().UserType_Id == 3) { } else if (users.First().UserType_Id == 4) { } } } this.ModelState.AddModelError("", "نام کاربری یا کلمه عبور اشتباه وارد شده اند."); ViewBag.Error = ""; return View(loginInfo); }
<appSettings> <add key="webpages:Version" value="2.0.0.0" /> <add key="webpages:Enabled" value="false" /> <add key="PreserveLoginUrl" value="true" /> <add key="ClientValidationEnabled" value="true" /> <add key="UnobtrusiveJavaScriptEnabled" value="true" /> </appSettings>
سناریو هایی وجود دارد که نیاز است مشتری ، خود شیوه نامه هایی (CSS) را برای قسمتهای مختلف سایت انتخاب کند. برای مثال تنظیماتی را برای منوی سایت در نظر گرفته ایم که مشتری بتواند رنگ و قلم و ... را متناسب با سلیقهی خود تغییر دهد و یا یک قسمت کلی برای اعمال شیوه نامهها به سایت ایجاد کرده ایم که در همهی قسمتهای سایت اعمال شود. بدین شکل در صورتی که مشتری، اطلاعات اندکی هم در مورد CSS داشته باشد میتواند ظاهر سایت خود را به آسانی تغییر دهد و تا حدودی بار را از روی دوش پشتیبان سایت بر میدارد.
RenderSection این امکان را میدهد که ما بتوانیم شیوه نامهی دیگری را در صفحات دیگر به MasterPage خود تزریق کنیم.
در اینجا یک متد به نام GetStyle داریم که وظیفهی بازگشت یک رشته را بر عهده دارد و نوع این مقدار بازگشتی از نوع text/css است و میتواند شیوه نامه هایی که در دیتابیس و یا یک فایل متنی ذخیره کرده ایم را واکشی و به استریم ارسال کند.
در سکشن Style لینک شیوه نامه ای تعریف کرده ایم که ویژگی href آن به اکشن GetStyle در کنترلر Home اشاره میکند و این اکشن نیز محتوای شیوه نامه را برگشت میدهد.
مثال این مطلب : DynamicCssExample.zip به همراه بازسازی کامل پوشه packages بستههای NuGet به صورت خودکار
و برای همهی اینها نیاز است تا فیلدی در دیتابیس برای ذخیرهی شیوه نامههای مشتری ایجاد شود و یا در یک فایل متنی ذخیره شود که بسته به سیاست برنامه نویس دارد.
در این مطلب تصمیم داریم این سناریو را به صورت ساده در یک پروژه ASP.NET MVC پیاده سازی کنیم.
ایتدا یک پروژه از نوع ASP.NET MVC 4 ایجاد میکنیم. سپس قطعه کد زیر را به فایل Layout.cshtml_ موجود در مسیر Views/Shared به صورت زیر اضافه میکنیم :
<head> @*سایر شیوه نامهها و اسکریپت ها*@ @RenderSection("styles", required: false) </head>
سپس کنترلری به نام Home ایجاد میکنیم :
namespace DynamicCssExample.Controllers { public class HomeController : Controller { public ActionResult Index() { return View(); } public string GetStyle() { Response.ContentType = "text/css"; //در این قسمت میتوانیم به دیتابیس متصل شویم و شیوه نامهی مورد نظر را واکشی کنیم و بازگشت دهیم return "h2{color:yellow}"; } } }
در انتها برای استفاده از این متد کافی است در View مربوطه بدین شکل عمل کنیم :
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } @section styles { <link rel="stylesheet" href="@Url.Action("GetStyle", "Home")" type="text/css"/> } <h2>Index</h2>
مثال این مطلب : DynamicCssExample.zip به همراه بازسازی کامل پوشه packages بستههای NuGet به صورت خودکار
- «... .این کامپوننت شامل یک Output event میباشد ...» و «... به عنوان
Route پیش فرض تعیین کردم ...»
خوب، این دیگر مرتبط با بحث کامپوننتهای «تو در تو» نیست؛ چون خودش کامپوننت والد است.
- «... حالا کجا باید تعیین کرد که اگر این event رخ داد چه متدی صدا زده شود ...»
در همان کلاس کامپوننت متناظر با آن؛ برای مثال در اینجا در فایل product-list.component.ts اینکار انجام شدهاست.
- «... این خط را باید کجا نوشت ...»
در قالب مرتبط با آن کامپوننت؛ برای مثال در اینجا در فایل product-list.component.html متد onRatingClicked کلاس کامپوننت فراخوانی شدهاست.
خوب، این دیگر مرتبط با بحث کامپوننتهای «تو در تو» نیست؛ چون خودش کامپوننت والد است.
- «... حالا کجا باید تعیین کرد که اگر این event رخ داد چه متدی صدا زده شود ...»
در همان کلاس کامپوننت متناظر با آن؛ برای مثال در اینجا در فایل product-list.component.ts اینکار انجام شدهاست.
- «... این خط را باید کجا نوشت ...»
در قالب مرتبط با آن کامپوننت؛ برای مثال در اینجا در فایل product-list.component.html متد onRatingClicked کلاس کامپوننت فراخوانی شدهاست.