在ASP.NET MVC中,有什么区别:
Html.Partial 和 Html.RenderPartialHtml.Action 和 Html.RenderAction我有以下控制器操作:
[ChildActionOnly]
public virtual PartialViewResult ListActions(int id)
{
var actions = meetingActionRepository.GetAllMeetingActions(id);
return PartialView(actions);
}
Run Code Online (Sandbox Code Playgroud)
以及以下操作链接(使用t4MVC和razor语法)
<p>
@Html.RenderAction(MVC.MeetingActions.ListActions(Model.MeetingId))
</p>
Run Code Online (Sandbox Code Playgroud)
但是这给了我错误:
不能隐式地将类型void转换为对象
至于我可以告诉控制器动作是好的,那么什么可以给我这个错误?
我一直试图弄清楚RenderAction和Action之间的区别.我不知道我是否如此关注这一点上的差异,以及为什么我无法让RenderAction工作.据我所知,我正在传递正确的参数.我正在使用的重载似乎是相同的:
@Html.RenderAction(Action, Controller, Route)
@Html.Action("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})
@Html.RenderAction("Breadcrumb", "Navigation", new {SeoUrl = Model.CarlineBucket.SEOURLName})
Run Code Online (Sandbox Code Playgroud)
我尝试使用RenderAction时收到编译错误:
CS1502:'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配具有一些无效参数.
任何提示或提示?我是否应该甚至不打扰RenderAction?
我正在尝试制作动态菜单(存储在数据库中),该菜单显示在所有Web应用程序页面上.使用Google我发现将菜单视图作为Master View(_Layout.cshtml)的一部分更好.因此,控制器的每个操作方法都必须包含菜单模型的数据.为了避免代码重复,我找到了创建基本控制器并使用其构造函数提供数据的解决方案:
此外,我正在尝试使用async/await可能性,而我的PageService(菜单)正在使用ToListAsync()从DB获取数据.所以现在我有一个问题,BaseController构造函数有一个异步方法:
public class BaseController : AsyncController, IBaseController
{
private readonly IPageService _pageService;
public BaseController(IPageService pageService)
{
_pageService = pageService;
SetBaseViewModelAsync();
}
private async Task SetBaseViewModelAsync()
{
ViewData["Pages"] = await _pageService.GetAllAsync();
}
}
Run Code Online (Sandbox Code Playgroud)
我知道这是坏代码,但我不知道如何正确设计这种情况.也许有另一种更好的方法来创建动态菜单或另一种异步获取数据的方法?
此外,我发现了这篇文章,但我不知道我是否可以应用它的解决方案,因为我不知道我是否可以处理控制器实例创建:
http://blog.stephencleary.com/2013/01/async-oop-2-constructors.html