ServiceStack 4 Razor: no intellisense in Visual Studio 2013 with update 2

411 Views Asked by At

I am running a Asp.Net Host (ServiceStack.Host.AspNet 4.0.30.0) - ServiceStack 4.0.30.0 project with Razor.

.Net Framework Target: 4.5.1

The project compiles fine, but I am not getting any intellisense in my Razor Views using Visual Studio 2013 with Update 2.

Any ideas on how to get intellisense to work in the ServiceStack Razor views? My machine has MVC 4 and 5 installed as well.

enter image description here

Here is also a copy of my web.config...

<?xml version="1.0" encoding="utf-8"?>
<!--
  For more information on how to configure your ASP.NET application, please visit
  http://go.microsoft.com/fwlink/?LinkId=169433
  -->
<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor" requirePermission="false" />
    </sectionGroup>
  </configSections>

  <!--
    For a description of web.config changes see http://go.microsoft.com/fwlink/?LinkId=235367.

    The following attributes can be set on the <httpRuntime> tag.
      <system.Web>
        <httpRuntime targetFramework="4.5.1" />
      </system.Web>
  -->
  <system.web>
    <httpRuntime />
    <compilation targetFramework="4.5.1" debug="true">
    <buildProviders>
        <add extension=".cshtml" type="ServiceStack.Razor.CSharpRazorBuildProvider, ServiceStack.Razor" />
      </buildProviders></compilation>
    <pages controlRenderingCompatibilityVersion="4.0" />
  <httpHandlers>
      <add path="*" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" />
    </httpHandlers></system.web>
  <system.web.webPages.razor>
    <pages pageBaseType="ServiceStack.Razor.ViewPage">
      <namespaces>
        <add namespace="windows_consumer81_demo.Models" />
        <add namespace="windows_consumer81_demo.Models.Scenario" />
        <add namespace="windows_consumer81_demo.Localization" />
        <add namespace="System" />
        <add namespace="ServiceStack" />
        <add namespace="ServiceStack.Html" />
        <add namespace="ServiceStack.Razor" />
        <add namespace="ServiceStack.Text" />
        <add namespace="ServiceStack.OrmLite" />
        <add namespace="windows_consumer81_demo" />
      </namespaces>
    </pages>
    <host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc" />
  </system.web.webPages.razor>
  <appSettings>
    <add key="DebugMode" value="true" />
    <add key="unsupportedRedirect" value="unsupported.html" />
    <add key="vs:EnableBrowserLink" value="false" />
  <add key="webPages:Enabled" value="false" /></appSettings>
<system.webServer>
    <modules runAllManagedModulesForAllRequests="true" />
    <validation validateIntegratedModeConfiguration="false" />
    <handlers>
      <add path="*" name="ServiceStack.Factory" type="ServiceStack.HttpHandlerFactory, ServiceStack" verb="*" preCondition="integratedMode" resourceType="Unspecified" allowPathInfo="true" />
    </handlers>
  </system.webServer>
</configuration>

enter image description here

1

There are 1 best solutions below

0
On

I guess the way it's supposed to work is that all the namespaces you add in web.config should have IntelliSense:

<system.web.webPages.razor>
  <pages pageBaseType="ServiceStack.Razor.ViewPage">
    <namespaces>
    <add namespace="YourNameSpaceHere" />
    <add namespace="SomeServiceStackNameSpace" />
    . . .

Then in the .cshtml file you'd add:

@inherits ViewPage<YourModelClassName>

Unfortunately this doesn't always work. It compiles, but you don't get IntelliSense.

However there is a fix:

In your .cshtml file just type out the full namespace:

@inherits ServiceStack.Razor.ViewPage<Full.Namespace.Of.Your.Model.Class>

If you're using other classes, just add:

@using MyServer.ServiceInterface;
@using MyServer.ServiceModel;

Another trick I recommend is to strongly type your @Model object. Right there at the top, after the @Inherits ViewPage<...> stuff add:

@{
  Your.Class.Name TypedModel = Model; 
}

Feel free to rename TypedModel to something better.