Razor HTML Helpers在Nop Commerce插件中提供智能感知错误

时间:2014-06-12 02:51:52

标签: c# asp.net asp.net-mvc razor nopcommerce

我正在为Nop Commerce编写一个插件,我的HTML助手给了我智能感知错误。我得到红线强调它们和错误:

无法使用功能'扩展方法',因为它不是ISO-2 C#语言规范的一部分

无法使用功能'lambda expression',因为它不是ISO-2 C#语言规范的一部分

这是我的代码:

@{
    Layout = "";
}
@model Nop.Plugin.Widgets.HelloWorld.Models.ConfigurationModel
@using Nop.Web.Framework;
@Html.Action("StoreScopeConfiguration", "Setting", new { area = "Admin" })
@using (Html.BeginForm())
{
    <fieldset>
        <legend><strong>Hello World Configuration</strong></legend>
        <table class="adminContent">
            <tr>
                <td class="adminTitle">
                @Html.OverrideStoreCheckboxFor(model => model.Greeting_OverrideForStore, model => model.Greeting, Model.ActiveStoreScopeConfiguration)
                    @Html.NopLabelFor(model => model.Greeting):
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.Greeting)
                    @Html.ValidationMessageFor(model => model.Greeting)
                </td>
            </tr>
            <tr>
                <td class="adminTitle">
                    @Html.OverrideStoreCheckboxFor(model => model.Name_OverrideForStore, model => model.Name, Model.ActiveStoreScopeConfiguration)
                    @Html.NopLabelFor(model => model.Name):
                </td>
                <td class="adminData">
                    @Html.EditorFor(model => model.Name)
                    @Html.ValidationMessageFor(model => model.Name)
                </td>
            </tr>
        </table>
    </fieldset>
    <br />
    <table class="adminContent">
        <tr>
            <td colspan="2">
                <input type="submit" name="save" class="k-button" value="@T("Admin.Common.Save")" />
            </td>
        </tr>
    </table>
}

我的屏幕如下:

enter image description here

我已经找了几个小时的答案,但还没找到一个真正有用的。该项目是一个代码库,与其他解决方案一样,在ASP.NET 4.5.1上。我建立时没有错误。我错过了引用或使用声明吗?我不确定发生了什么。

3 个答案:

答案 0 :(得分:3)

我能够使用VS2013的唯一方法是将类库项目转换为MVC项目:

  1. <PropertyGroup>中,添加< ProjectTypeGuids>{349c5851-65df-11da-9384-00065b846f21};{fae04ec0-301f-11d3-bf4b-00c04f79efbc}< /ProjectTypeGuids>
  2. 在底部添加另一个导入:< Import Project="$(MSBuildExtensionsPath32)\Microsoft\VisualStudio\v12.0\WebApplications\Microsoft.WebApplication.targets" Condition="false" />

    当然要删掉&lt;标签&gt;,没有他们就没有正确发布。这里有一个与此相关的错误:https://connect.microsoft.com/VisualStudio/feedback/details/912301/intellisense-for-razor-in-class-libraries-not-working

答案 1 :(得分:2)

从VS2013 Update 4开始,关于将项目从类库修改为MVC项目的上述答案对我来说不起作用。

以下情况确实有效:

  1. 对于所有配置,请按照nopCommerce文档中的说明将构建,输出,输出路径设置为bin\ ..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\

    在.csproj文件中,它应该如下所示:

    <OutputPath>bin\</OutputPath>
    
  2. 设置构建事件,构建后命令行:以复制到nopCommerce所需的目录。

    (robocopy $(ProjectDir)$(OutDir) $(ProjectDir)..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ /MIR) ^& IF %ERRORLEVEL% LEQ 1 exit 0
    

    在.csproj文件中,它应该如下所示:

    <PropertyGroup>
        <PostBuildEvent>(robocopy $(ProjectDir)$(OutDir)  $(ProjectDir)..\..\Presentation\Nop.Web\Plugins\PLUGINNAMESPACE.PLUGINNAME\ /MIR)  ^&amp; IF %25ERRORLEVEL%25 LEQ 1 exit 0</PostBuildEvent>
    </PropertyGroup>
    
  3. 设置构建事件,运行构建后事件:为“始终”。

    在.csproj文件中,它应该如下所示:

    <PropertyGroup>
        <RunPostBuildEvent>Always</RunPostBuildEvent>
    </PropertyGroup>
    
  4. 确保插件项目中的每个DLL文件引用都设置为复制本地。这对于像Nop.Core,Nop.Data等项目参考条目来说不是必需的。同样,这是他们告诉你在nopCommerce文档中做的事情,但它需要使Intellisense工作。

    在.csproj文件中,它应该如下所示:

    <Reference Include="System.Web">
        <Private>True</Private>
    </Reference>
    
    (repeat for all DLL file references)...
    
  5. 关闭并重新打开解决方案,重建插件项目,然后打开任何razor .cshtml文件。 Intellisense将按预期工作,并且不需要任何未来的黑客来维护它。

答案 2 :(得分:0)

项目需要在插件开发中了解它

1:关闭解决方案 2:用任何编辑器打开你的* .csproj文件 3:在项目结束标记

的末尾附近添加以下内容
<Import Project="$(SolutionDir)\FixRazorIntellisense.targets" Condition="'$(Configuration)' == 'PluginDev'" />

4:重新加载解决方案/项目