.NET控制器传字符串列表到视图报错:foundEmails不存在于当前上下文
解决视图中无法访问
foundEmails的问题 你这里的问题出在MVC控制器与视图的模型传递逻辑上——你在控制器里把foundEmails列表作为模型传给了视图,但视图并不知道你在控制器里定义的这个变量名,它只会通过内置的Model属性来接收传递过来的模型数据。
下面是两种不需要额外方法的解决方案,直接就能实现你的需求:
方案1:直接使用Model属性(推荐)
这是MVC传递模型的标准写法,只需要修改视图代码,遍历Model即可。如果想获得IDE智能提示和类型检查,可以在视图顶部声明模型类型:
@model List<string> <!-- 声明视图的模型类型,可选但推荐添加 --> @{ ViewBag.Title = "View"; } <h2>View</h2> @foreach(var item in Model) { <p>@item</p> }
你的控制器代码完全不需要改动,return View(foundEmails);已经正确把列表作为模型传递给视图了。
方案2:将Model赋值给foundEmails变量
如果你坚持想在视图里用foundEmails这个变量名,可以在视图的代码块里把Model转换后赋值给它:
@{ ViewBag.Title = "View"; // 把传递过来的模型转换为List<string>,赋值给foundEmails var foundEmails = Model as List<string>; } <h2>View</h2> @if(foundEmails != null) { <!-- 加上空检查避免空引用错误 --> foreach(var item in foundEmails) { <p>@item</p> } }
报错原因说明
错误The name 'foundEmails' does not exist in the current context是因为视图的上下文里并没有定义foundEmails这个变量——控制器里的变量是局部变量,不会直接暴露给视图,只有传递给视图的模型会通过Model属性被访问到。
内容的提问来源于stack exchange,提问作者Lucie
相关产品推荐
相关产品推荐

