所以这个“名称'模型'在当前上下文中不存在”错误很常见。但是,我可能会有不同的原因。
在我看来,我使用了多个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,以完成所有信息。
答案 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
也已正确填充。