Я пытаюсь реализовать страницу пользовательского базового представления MVC, чтобы «переопределить» тип свойства User
. Это сделает мой тип CustomPrincipal
доступным в любом представлении.Внедрение пользовательской базы данных MVC Page
После поиска в Интернете я нашел Phil Haack's instructions for implementing a custom base view page. Я выполнял инструкции точно так, как они написаны, но я столкнулся с проблемой при доступе к свойствам в представлении.
Когда я открываю представление, любые предыдущие действия html-помощника подчеркиваются синей, squiggly-строкой. Когда я наводил курсор на участок @Html
, он обнаруживает ошибку:
«Html неоднозначен, импортирован из пространств имен или типов« System.Web.WebPages, System.Web.Mvc ».
Теперь я понимаю, почему я получаю сообщение, но я не понимаю, как его исправить. Я не знаю, почему это имеет значение, но текущее приложение было создано в Visual Basic. В качестве вторичного теста я создал другое приложение MVC на C# и попытался реализовать пользовательскую страницу базового представления. В приложении C# он работал нормально. Я могу получить доступ к своему пользовательскому свойству из представлений.
Я просмотрел веб-страницы, ища ответ на этот вопрос, но пока ничего не нашел. Кто-нибудь еще сталкивается с подобной проблемой?
Для справки, я включил мою пользовательскую страницу базы просмотра и ~/Views/web.config
ниже:
BaseViewPage
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Web.Mvc;
using CCInfoController;
namespace CCInfo.Web.Mvc
{
public class BaseViewPage<TModel> : WebViewPage<TModel>
{
public new CustomPrincipal User
{
get
{
return base.User as CustomPrincipal;
}
}
public override void Execute()
{
}
}
}
~/Views/web.config
<configuration>
<configSections>
<sectionGroup name="system.web.webPages.razor"
type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup,
System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35">
<section name="host"
type="System.Web.WebPages.Razor.Configuration.HostSection,
System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
<section name="pages"
type="System.Web.WebPages.Razor.Configuration.RazorPagesSection,
System.Web.WebPages.Razor, Version=1.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
</sectionGroup>
</configSections>
<system.web.webPages.razor>
<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory,
System.Web.Mvc, Version=3.0.0.0, Culture=neutral,
PublicKeyToken=31BF3856AD364E35" />
<pages pageBaseType="CCInfo.Web.Mvc.BaseViewPage">
<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="System.Web.WebPages"/>
<add namespace="CCInfoController" />
</namespaces>
</pages>
</system.web.webPages.razor>
...
</configuration>
Не знаю, что вы пытаетесь сделать. Почему WebViewPage? Почему бы не посмотреть? В MVC нет WebViewPage, или я что-то пропустил. Обычный пользователь обычно является частью HttpContext. – maxs87
Фактически, 'WebViewPage' фактически является [частью структуры MVC] (http://msdn.microsoft.com/en-us/library/gg402107%28v=vs.98%29.aspx). И да, свойство «Пользователь» является частью «HttpContext» и доступно через представление. То, что я хочу сделать, - это доступ к свойству 'User', но используйте страницу базового представления, чтобы изменить тип этого свойства на мой« CustomPrincipal », а не на« IPrincipal ». Имеют смысл? – hitopp
Честно говоря, я чувствую, что это слишком много возиться просто, чтобы не бросать Пользователь самостоятельно. Если вы используете его часто, я бы просто создал метод расширения для IPrinciple, который его отличает. Намного меньше усилий, и не нужно делать дополнительный код на каждой странице. Помните, что вы также должны получить от Controller, а также ApiController и несколько других. Это является воплощением O в SOLID, который является принципом Open/Closed. Наследование нарушает OCP. –