Если вам нужны эти «общие данные» во всех представлениях, я бы не стал использовать наследование.Я бы выбрал метод расширения.
Что-то вроде:
public static CommonData GetCommonData(this HtmlHelper htmlhelper)
{
// do your magic here
}
В вашем представлении вы можете просто вызвать:
@Html.GetCommonData()...
Таким образом, выДержите ваши модели в чистоте.
Наследование может быть правильным подходом, если эти Общие данные действительно хорошо "вписываются" в ваши классы Модели.
Было бы полезно, если бы вы предоставили несколько примеров;1013 *
** РЕДАКТИРОВАНИЕ **
Я бы оставил вашу BaseModel как свойство в Controller и заполнил бы его в OnActionExecuting, как вы предлагаете.
Но я бы использовал ExtensionMethods вКонтроллер и Html помощник для доступа к данным.Если вы используете наследование, вы без необходимости усложняете ситуацию.
Дайте мне знать, если вам нужны примеры методов расширения.
Этот подход СУХОЙ.Вы не дублируете код.
** РЕДАКТИРОВАНИЕ 2 **
Вот как должен выглядеть ваш метод расширения: (вне моей головы, поэтому он может не скомпилироваться)
public static class ExtensionHelpers
{
public static BaseModel GetCommonData(this HtmlHelper htmlhelper)
{
YourController HtmlHelper = htmlhelper.ViewContext.Controller as YourController;
if (controller != null)
{
return HtmlHelper.BaseModel;
}
return null;
}
Убедитесь, что Controller является производным от класса Controller, в который вы добавляете свойство BaseModel.Я назвал это 'YourController' выше.
Тогда вам следует идти; -)
Edit 3
Просто напоминание о том, что пространство имен должно быть известно, если выхочу использовать методы расширения в представлении.Лучший способ добиться этого - включить пространство имен в Web.Config в папку Views.
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="System.Web.Mvc.WebViewPage">
<namespaces>
<add namespace="System.Web.Mvc" />
<add namespace="System.Web.Mvc.Ajax" />
<add namespace="System.Web.Mvc.Html" />
<add namespace="System.Web.Routing" />
<add namespace="Yournamespace" /> <- LOOK HERE
</namespaces>
</pages>
</system.web.webPages.razor>