"A namespace cannot directly contain members such as fields or methods" 文件:具有上下文的控制器

"A namespace cannot directly contain members such as fields or methods" File: controller with context

<#@ template language="C#" HostSpecific="True" #>
<#
var Model = (MvcTextTemplateHost)Host;
var routePrefix = String.Empty;
if (!String.IsNullOrWhiteSpace(Model.AreaName)) {
routePrefix = "/" + Model.AreaName;
}
routePrefix += "/" + Model.ControllerRootName + "/";
#>
<#@ import namespace="System.Collections" #>
<#@ import namespace="System.Collections.Generic" #>
<#@ import namespace="System.Data.Objects" #>
<#@ import namespace="System.Linq" #>
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Linq;
using System.Web;
using System.Web.Mvc;
<# if(MvcTextTemplateHost.NamespaceNeeded(Model.Namespace,         Model.ModelType.Namespace)) { #>
using <#= Model.ModelType.Namespace #>;
<# } #>
<# if(Model.ContextType.Namespace != Model.ModelType.Namespace &&   MvcTextTemplateHost.NamespaceNeeded(Model.Namespace,  Model.ContextType.Namespace)) { #>
using <#= Model.ContextType.Namespace #>;
<# } #>
namespace <#= Model.Namespace #>
{
<#
var modelName = Model.ModelType.Name;
var entitySetName = Model.EntitySetName;
var modelVariable = modelName.ToLower();
var entitySetVariable = entitySetName.ToLower();
var primaryKey = Model.PrimaryKeys[0];
var lambdaVar = modelVariable[0];
var isObjectContext =   typeof(ObjectContext).IsAssignableFrom(Model.ContextType);
#>
public class <#= Model.ControllerName #> : BootstrapBaseController
{
    private <#= Model.ContextType.Name #> db = new <#= Model.ContextType.Name #>();

    //
    // GET: <#= routePrefix #>

    public ActionResult Index()
    {
<#  var includeExpressions = "";
if(isObjectContext) {
    includeExpressions = String.Join("",  Model.RelatedProperties.Values.Select(property => String.Format(".Include(\" {0}\")", property.PropertyName)));
}
else {
    includeExpressions = String.Join("", Model.RelatedProperties.Values.Select(property => String.Format(".Include({0} =>  {0}.{1})", lambdaVar, property.PropertyName)));
}
#>
# if(!String.IsNullOrEmpty(includeExpressions)) { #>
        var <#= entitySetVariable #> = db.<#= entitySetName #><#=    includeExpressions #>;
        return View(<#= entitySetVariable #>.ToList());
<# } else { #>
        return View(db.<#= entitySetName #><#= includeExpressions   #>.ToList());
<# } #>
    }

    //
    // GET: <#= routePrefix #>Details/5

    public ActionResult Details(<#= primaryKey.ShortTypeName #> id)
    {
<# if(isObjectContext) { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName   #>.Single(<#= lambdaVar #> => <#= lambdaVar #>.<#= primaryKey.Name #> == id);
<# } else { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName  #>.Find(id);
<# } #>
        if (<#= modelVariable #> == null)
        {
            return HttpNotFound();
        }
        return View(<#= modelVariable #>);
    }

    //
    // GET: <#= routePrefix #>Create

    public ActionResult Create()
    {
<# foreach (var property in Model.RelatedProperties.Values) { #>
        ViewBag.<#= property.ForeignKeyPropertyName #> = new SelectList(db.  <#= property.EntitySetName #>, "<#= property.PrimaryKey #>", "<#=  property.DisplayPropertyName #>");
<# } #>
        return View(new <#= modelName #>());
    }

    //
    // POST: <#= routePrefix #>Create

    [HttpPost]
    public ActionResult Create(<#= modelName #> <#= modelVariable #>)
    {
        if (ModelState.IsValid)
        {
<# if(primaryKey.Type == typeof(Guid)) { #>
            <#= modelVariable #>.<#= primaryKey.Name #> = Guid.NewGuid();
<# } #>
<# if(isObjectContext) { #>
            db.<#= entitySetName #>.AddObject(<#= modelVariable #>);
<# } else { #>
            db.<#= entitySetName #>.Add(<#= modelVariable #>);
<# } #>
            db.SaveChanges();
            return RedirectToAction("Index");
        }

<# foreach (var property in Model.RelatedProperties.Values) { #>
        ViewBag.<#= property.ForeignKeyPropertyName #> = new SelectList(db.  <#= property.EntitySetName #>, "<#= property.PrimaryKey #>", "<#=  property.DisplayPropertyName #>", <#= modelVariable #>.<#=  property.ForeignKeyPropertyName #>);
<# } #>
        return View(<#= modelVariable #>);
    }

    //
    // GET: <#= routePrefix #>Edit/5

    public ActionResult Edit(<#= primaryKey.ShortTypeName #> id = <#=  primaryKey.DefaultValue #>)
    {
<# if(isObjectContext) { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName   #>.Single(<#= lambdaVar #> => <#= lambdaVar #>.<#= primaryKey.Name #> == id);
<# } else { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName  #>.Find(id);
<# } #>
        if (<#= modelVariable #> == null)
        {
            return HttpNotFound();
        }
<# foreach (var property in Model.RelatedProperties.Values) { #>
        ViewBag.<#= property.ForeignKeyPropertyName #> = new SelectList(db.   <#= property.EntitySetName #>, "<#= property.PrimaryKey #>", "<#=  property.DisplayPropertyName #>", <#= modelVariable #>.<#=  property.ForeignKeyPropertyName #>);
<# } #>
        return View("Create", <#= modelVariable #>);
    }

    //
    // POST: <#= routePrefix #>Edit/5

    [HttpPost]
    public ActionResult Edit(<#= modelName #> <#= modelVariable #>)
    {
        if (ModelState.IsValid)
        {
<# if(isObjectContext) { #>
            db.<#= entitySetName #>.Attach(<#= modelVariable #>);
            db.ObjectStateManager.ChangeObjectState(<#= modelVariable #>,  EntityState.Modified);
<# } else { #>
            db.Entry(<#= modelVariable #>).State = EntityState.Modified;
<# } #>
            db.SaveChanges();
            return RedirectToAction("Index");
        }
<# foreach (var property in Model.RelatedProperties.Values) { #>
        ViewBag.<#= property.ForeignKeyPropertyName #> = new SelectList(db.   <#= property.EntitySetName #>, "<#= property.PrimaryKey #>", "<#= property.DisplayPropertyName #>", <#= modelVariable #>.<#= property.ForeignKeyPropertyName #>);
<# } #>
        return View("Create", <#= modelVariable #>);
    }

    //
    // GET: <#= routePrefix #>Delete/5

    public ActionResult Delete(<#= primaryKey.ShortTypeName #> id)
    {
<# if(isObjectContext) { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName   #>.Single(<#= lambdaVar #> => <#= lambdaVar #>.<#= primaryKey.Name #> == id);
        db.<#= entitySetName #>.DeleteObject(<#= modelVariable #>);
<# } else { #>
        <#= modelName #> <#= modelVariable #> = db.<#= entitySetName #>.Find(id);
        db.<#= entitySetName #>.Remove(<#= modelVariable #>);
    <# } #>
            db.SaveChanges();
            return RedirectToAction("Index");
        }
            protected override void Dispose(bool disposing)
            {
               db.Dispose();
               base.Dispose(disposing);
            }
        }
    }

此代码是在我的 Task1 ASP.NET MVC 应用程序中的代码模板文件下自动生成的,但是每当我执行我的项目时,我都会在该内容的第 1 行和第 1 栏收到上述错误,请提供我的解决方案来解决这个错误。

您只需使用以下代码片段即可重现该问题。

<#@ template language="C#" HostSpecific="True" #>
<#
var Model = (MvcTextTemplateHost)Host;
#>

无法解析 MvcTextTemplateHost 类型,导致出现您看到的错误。有相当多的 Google results 具有潜在的解决方案,其中大部分涉及确保您的项目具有对一个或另一个版本的 Microsoft.VisualStudio.Web.Mvc.3.01.dll 的有效引用。