ASP.NET MVC - قم بتعيين العرض الرئيسي وفقًا لذلك باستخدام وحدة التحكم
-
07-07-2019 - |
سؤال
بأي حال من الأحوال، هل هناك أي طريقة سهلة لتعيين MasterView الافتراضي لجميع الإجراءات داخل وحدة تحكم معينة؟
على سبيل المثال إذا كان لدي HomeController أريد أن ترث جميع الإجراءات الموجودة بداخله ملف الموقع.ماستر كإعداد افتراضي، ولكن إذا كنت في الداخل AccountsController أريد أن يرث كل الإجراء المشرف.ماجستير وما إلى ذلك وهلم جرا..
تمكنت من القيام بذلك مع:
return View("viewName", "masterName", objectModel);
ولكن من خلال القيام بذلك لا بد لي من تطبيقه في كل مرة أقوم فيها باستدعاء طريقة العرض.
كنت أبحث عن شيء أبسط مثل القضبان حيث يمكننا أن نعلن:
class HomeController < ApplicationController
layout 'site'
def index
end
def create
...
end
class AccountsController < ApplicationController
layout 'admin'
def index
end
def create
...
end
هل هذا ممكن؟
شكرا لك مقدما
المحلول
يمكنك تجاوز OnActionExecuting في فئة وحدة التحكم هذه.
protected override void OnActionExecuting(ActionExecutingContext filterContext)
{
ViewData["MasterfileToUser"] = "site";
}
أو إذا أردت، يمكنك تحويل هذا إلى ActionFilterAttribute الذي يمكنك تطبيقه على وحدة التحكم أو مستوى الإجراء
using System;
using System.Web.Mvc;
public class MasterFileFilterAttribute : ActionFilterAttribute
{
public string Master { get; set; }
public override void OnActionExecuted( ActionExecutedContext filterContext)
{
if (filterContext.Result is ViewResult)
((ViewResult)filterContext.Result).MasterName = Master;
}
}
والتي تستخدمها بدورها كما يلي:
[MasterFileFilterAttribute(Master = "site")]
public class HomeController : Controller
{
// Action methods
}
لا تنتمي إلى StackOverflow