我的PartialView导致我的应用程序每次都崩溃

时间:2017-06-01 15:38:45

标签: c# asp.net asp.net-mvc razor asp.net-mvc-5

我正在尝试使用数据库中的一些数据加载我的部分视图,但是当我运行应用程序时,我遇到了以下问题:

  

不允许子操作执行重定向操作。

我不知道为什么会这样,因为我对MVC技术很新。

以下是控制器中的PartialViewResult方法:

public PartialViewResult UnReadEmails()
{
   if (User.Id != null)
   {
      List<Emails> resultList = EmailController.GetUnreadEmailsByUserId(User.Id);
       return PartialView("~/Views/Emails/_UnReadEmails.cshtml", resultList);
   }
   return PartialView("Error, not found!");
}

这是我的部分视图本身,它被称为_UnReadEmails(你可以看到我在这里显示有关发件人和电子邮件正文的信息),PartialView正在检索我从我的控制器发送到的电子邮件列表

@model IEnumerable<Emails>

foreach (var item in Model)
{
    <li>
        <a>
            <span>
               <span>@item.EmailSender</span>
               <span class="email">
                     @item.Body;
               </span>
        </a>
    </li>
}

尝试以这种方式加载部分视图后:

@Html.Action("UnreadEmails", "Message")

我开始收到我在标题中提到的以下问题,

我已经尝试过很少的事情来解决这个问题,例如将@Html.Action("UnreadEmails", "Message")更改为@Url.Action("UnreadEmails", "Message")等等,但这并没有解决我的问题。

编辑:它总是打破这一行(在视图上):

@Html.Action("UnreadEmails", "Message")

它永远不会进入代码...... enter image description here

在克里斯建议另一篇文章之后,我在方法的顶部添加了[AllowAnonymous]

[AllowAnonymous]
public PartialViewResult UnReadEmails()
{
   if (User.Id != null)
   {
      List<Emails> resultList = EmailController.GetUnreadEmailsByUserId(User.Id);
       return PartialView("~/Views/Emails/_UnReadEmails.cshtml", resultList);
   }
   return PartialView("Error, not found!");
}

编辑编辑编辑:

有趣的事实是,无论我在Controller的方法中写什么,即使我评论所有代码,它仍然会在View上中断,这意味着它永远不会进入Controller的方法。我在UnReadEmails方法开始的时候把它打破了,它从来没有被击中,它总是打破了View!

编辑后MAURIZIO建议将其更改为@Html.RenderPartial 比我收到以下问题:

  

找不到部分视图'UnReadEmails'或没有查看引擎   支持搜索的位置。以下地点是   搜索:〜/ Views / Dashboard / UnReadEmails.aspx   〜/ Views / Dashboard / UnReadEmails.ascx~ / Views / Shared / UnReadEmails.aspx   〜/ Views / Shared / UnReadEmails.ascx~ / Views / Dashboard / UnReadEmails.cshtml   〜/查看/仪表板/ UnReadEmails.vbhtml   〜/ Views / Shared / UnReadEmails.cshtml~ / Views / Shared / UnReadEmails.vbhtml

编辑:

编译器错误消息:CS0120:非静态字段,方法或属性'MessageController.UnReadEmails()'

需要对象引用

我试图将UnReadEmails()设为静态,但我收到以下错误:

  

错误1非静态字段需要对象引用,   方法或属性'System.Web.Mvc.Controller.PartialView(string,   对象)'...控制器\ Message \ MessageController.cs

1 个答案:

答案 0 :(得分:3)

由于您的部分视图不在共享文件夹中,因此您需要提供完整路径

{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml")}

由于该视图需要电子邮件列表,您需要将其添加为参数

{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",EmailController.GetUnreadEmailsByUserId(User.Id))}

最好的方法是在模型(List<Emails> lstUnreadEmails)中创建一个属性,并在MessageController的方法中加载该电子邮件列表,以便信息准备好部分为用这条指令渲染:

{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",Model.lstUnreadEmails)}

如果您没有&#34;主要型号&#34;你可以将它存储在ViewBag中,从MessageController方法调用它

ViewBag.lstUnreadEmail‌s = E‌​mailController.Get‌‌​​Un‌​readEmailsByUserId(U‌​ser.Id);

在视图中使用此

{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",ViewBag.lstUnreadEmail‌​s)}