我正在尝试使用数据库中的一些数据加载我的局部视图,但是运行该应用程序时出现以下问题:
子操作不允许执行重定向操作。
我不知道为什么会这样,因为我对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!");
}
这是我的partialview本身,它称为_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")
它永远不会成为背后的代码。
在克里斯对另一篇文章的建议之后,我在方法的顶部添加了
[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方法的开始处放置了breakpoing,但是它从未被使用过,它始终在View上中断!
将MAURIZIO建议修改后更改为
@Html.RenderPartial
比我收到以下问题:
找不到部分视图'UnReadEmails'或没有视图引擎
支持搜索的位置。以下位置是
搜索:〜/ Views / Dashboard / UnReadEmails.aspx
〜/ Views /仪表板/UnReadEmails.aspx〜/ Views / Shared / UnReadEmails.aspx
〜/ Views / Shared / UnReadEmails.ascx〜/ Views / Dashboard / UnReadEmails.cshtml
〜/ Views / Dashboard / UnReadEmails.vbhtml
〜/ Views / Shared / UnReadEmails.cshtml〜/ Views / Shared / UnReadEmails.vbhtml
编辑:
编译器错误消息:CS0120:非静态字段,方法或属性'MessageController.UnReadEmails()'需要对象引用。
我尝试将UnReadEmails()设置为静态,但是我收到以下错误:
错误1非静态字段需要对象引用,
方法或属性'System.Web.Mvc.Controller.PartialView(string,
对象)'... Controllers \ Message \ MessageController.cs
最佳答案
由于您的部分视图不在“共享”文件夹中,因此您需要提供完整路径
{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml")}
由于该视图需要电子邮件列表,因此需要将其添加为参数
{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",EmailController.GetUnreadEmailsByUserId(User.Id))}
最好的方法是在Model(
List<Emails> lstUnreadEmails
)中创建一个属性,并以MessageController
的方法加载该电子邮件列表,以使信息准备就绪,可以通过以下指令呈现部分信息:{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",Model.lstUnreadEmails)}
如果您没有“主模型”,则可以将其存储在
ViewBag
中,并从MessageController方法中调用它ViewBag.lstUnreadEmails = EmailController.GetUnreadEmailsByUserId(User.Id);
并在视图中使用此
{@Html.RenderPartial("~/Views/Emails/_UnReadEmails.cshtml",ViewBag.lstUnreadEmails)}