C# HostingEnvironment.MapPath中的堆栈溢出异常
因此,我有一个控制器,可以在我的项目中打开Json文件,如下所示:C# HostingEnvironment.MapPath中的堆栈溢出异常,c#,asp.net-mvc,asp.net-mvc-4,C#,Asp.net Mvc,Asp.net Mvc 4,因此,我有一个控制器,可以在我的项目中打开Json文件,如下所示: public class SharedController : Controller { string filePath = HostingEnvironment.MapPath(@"~/App_Data/MenuItems.json"); // GET: Shared [ChildActionOnly] public ActionResult _Menu() {
public class SharedController : Controller
{
string filePath = HostingEnvironment.MapPath(@"~/App_Data/MenuItems.json");
// GET: Shared
[ChildActionOnly]
public ActionResult _Menu()
{
StreamReader sr = new StreamReader(filePath);
string JsonString = sr.ReadToEnd();
JsonSerializerSettings settings = new JsonSerializerSettings
{
TypeNameHandling = TypeNameHandling.All
};
var menuItems = JsonConvert.DeserializeObject<List<MenuItem>>(JsonString, settings);
return View(menuItems.ToList());
}
}
@Html.Action("_Menu", "Shared")
我得到的错误是:
An unhandled exception of type 'System.StackOverflowException' occurred in mscorlib.dll
为什么会发生这种情况,以及如何在不出错的情况下获取文件路径
更新:我非常确定HostingEnvironment.MapPath是导致错误的原因,因为如果我尝试以不同的方式分配路径,我不会得到该错误,我会得到一个“foldernotfound”;新StreamReader行出错。我认为它是递归调用
\u菜单
操作方法,可能是因为您用于菜单的局部视图仍然使用相同的布局,该布局再次调用\u Men
u操作方法,并且这个循环直到内存耗尽才会结束
你有两个选择
PartialView()
方法,而不是View()
方法
return PartialView(menuItems.ToList());
\u Menu.cshtml
视图中将布局显式设置为null
@model List<MenuItem>
@{ Layout = null; }
<p>Your markup for menu goes here</p>
@型号列表
@{Layout=null;}
菜单的标记在这里
我认为它是递归地调用
\u菜单
操作方法,可能是因为您用于菜单的局部视图仍然使用相同的布局,该布局再次调用\u Men
u操作方法,并且这个循环直到内存耗尽才会结束
你有两个选择
PartialView()
方法,而不是View()
方法
return PartialView(menuItems.ToList());
\u Menu.cshtml
视图中将布局显式设置为null
@model List<MenuItem>
@{ Layout = null; }
<p>Your markup for menu goes here</p>
@型号列表
@{Layout=null;}
菜单的标记在这里
看起来这个@Html.Action(“\u Menu”,“Shared”)是递归调用的。看起来这个@Html.Action(“\u Menu”,“Shared”)是递归调用的。是的,这就是问题所在。我不认为部分也会调用布局。将partial的布局设置为null有效。哦,是的,这是partial,所以我应该返回PartialView。我认为这是更好的解决方案,但它们都有效。谢谢是的,这就是问题所在。我不认为部分也会调用布局。将partial的布局设置为null有效。哦,是的,这是partial,所以我应该返回PartialView。我认为这是更好的解决方案,但它们都有效。谢谢