ASP.NET MVC - قم بتعيين العرض الرئيسي وفقًا لذلك باستخدام وحدة التحكم

StackOverflow https://stackoverflow.com/questions/1418485

سؤال

بأي حال من الأحوال، هل هناك أي طريقة سهلة لتعيين 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 
}   
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top