当前上下文中不存在名称“model” - 仅在一个变量的一个页面上

时间:2015-10-27 14:51:42

标签: asp.net razor

所以这个“名称'模型'在当前上下文中不存在”错误很常见。但是,我可能会有不同的原因。

在我看来,我使用了多个model.variablename变量。但是在一行上它不起作用:

@Html.PasswordFor(model => model.Pw, new { @value = Model.Pw})

原样

@Html.TextBoxFor(model => model.Email)

正常工作。

我尝试了许多(如果不是全部)可能的解决方案。没有任何效果。但是,在这里排除它的部分我的webconfig(主要):

<appSettings>
    <add key="webpages:Version" value="3.0.0.0" />
    <add key="webpages:Enabled" value="false" />
  </appSettings>

我的Views文件夹中的webconfig:

<configuration>
  <configSections>
    <sectionGroup name="system.web.webPages.razor" type="System.Web.WebPages.Razor.Configuration.RazorWebSectionGroup, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35">
      <section name="host" type="System.Web.WebPages.Razor.Configuration.HostSection, System.Web.WebPages.Razor, Version=3.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" requirePermission="false" />
      <section name="pages" type="System.Web.WebPages.Razor.Configuration.RazorPagesSection, System.Web.WebPages.Razor, Version=3.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=5.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="System.Web.Optimization" /> 
        <add namespace="WingLok" />
      </namespaces>
    </pages>
  </system.web.webPages.razor>

我在Windows 10计算机上使用ASP.NET版本4.6,MVC5,Visual Studio 2012和Razor 3.0,以完成所有信息。

1 个答案:

答案 0 :(得分:1)

@model无效。

@置于前面的原因是您使用的是C#语法,例如

Html.InputFor(model => model.Name, new { class = "something" }

将失败,因为class是保留字。所以你需要:

Html.InputFor(model => model.Name, new { @class = "something" }

这是正确的。现在,基于该逻辑,Razor编译器正在寻找一个名为model的对象实例来解析它:

@Html.PasswordFor(model => model.Pw, new { @value = @model.Pw})

旁注,我认为@前面不需要value

找不到任何名为model的实例,因此会出错。

@Html.PasswordFor(model => model.Pw,....的lambda中,model是存在于该labda表达式的上下文中的参数。它在该行代码的其他地方不可用。因此,你得到错误的原因。

要解决此问题,请尝试

@Html.PasswordFor(model => model.Pw, new { @value = Model.Pw})

变量Model应该在Razor文件中的任何位置都可用。 Model是已传递给视图本身的实际视图模型。

编辑:

这是我试过的一些代码,对我来说很好用

<强>视图模型

public class HomeIndexViewModel
{
    public string Name { get; set; }
}

<强>控制器

public class HomeController : Controller
{
    public ActionResult Index()
    {
        var viewModel = new HomeIndexViewModel();

        viewModel.Name = "Hello World!";

        return View(viewModel);
    }
}

Razor查看

@model WebApplication1.Controllers.HomeIndexViewModel

@Html.TextBoxFor(model => model.Name, new { data_name = Model.Name })

当我查看网页时,我看到一个带有“Hello World!”的输入框。在里面。此外,这是该字段的HTML:

<input data-name="Hello World!" id="Name" name="Name" type="text" value="Hello World!">

如您所见,我的自定义数据属性data-name也已正确填充。