在ASP.NET MVC中,有什么区别:
Html.Partial 和 Html.RenderPartialHtml.Action 和 Html.RenderAction我有一个MVC 4视图,我在其中呈现以下操作
@{
Html.RenderAction("Index", "Logo");
Html.RenderAction("Index", "MainMenu");
}
Run Code Online (Sandbox Code Playgroud)
我的视图上有一个表格,填写并发布到控制器.在控制器中,我执行一些任务,然后将模型发送回我的视图
[HttpPost]
public ActionResult Index(ManageAdministratorModel manageAdministratorModel)
{
// I save some of the fields to the database here.
return View(manageAdministratorModel);
}
Run Code Online (Sandbox Code Playgroud)
当我被重定向到视图时,我收到以下错误
执行处理程序'System.Web.Mvc.HttpHandlerUtil + ServerExecuteHttpHandlerAsyncWrapper'的子请求时出错.
在这条线上
Html.RenderAction("Index", "Logo");
Run Code Online (Sandbox Code Playgroud)
知道为什么会这样吗?
我从MVC5开始,并从MVC5入门创建了第一个项目.
现在尝试使用Partial Rendering并在MoviesController中添加一个方法,如下所示
[ChildActionOnly]
public ActionResult PriceRange()
{
var maxprice = db.Movies.Max(m => m.Price);
var minprice = db.Movies.Min(m => m.Price);
ViewBag.MaxPrice = maxprice;
ViewBag.MinPrice = minprice;
return PartialView();
}
Run Code Online (Sandbox Code Playgroud)
它将电影集合中的最小和最大价格设置为稍后在视图中显示的ViewBag.我试图在不同的视图上呈现它.
首先,我尝试将其渲染Views/Movies/Index.cshtml如下
@{Html.RenderAction("PriceRange");}
Run Code Online (Sandbox Code Playgroud)
它在那里运行良好,结果显示正确,因为它正在使用MoviesController,方法PriceRange定义的同一个类.
然后我尝试Views/Hello/Index.cshtml使用HelloWorldController以下代码渲染它(此视图正在使用)(首先传递Action名称然后传递Controller名称)
@{Html.RenderAction("PriceRange", "MoviesController");}
Run Code Online (Sandbox Code Playgroud)
这里给出了运行时错误
未找到路径'/ HelloWorld/Index'的控制器或未实现IController.
这是来自Views/Hello/Index.cshtml的完整代码
@{
ViewBag.Title = "Movie List";
}
<h2>My Movie List</h2>
<p>Hello from our view template</p>
@{Html.RenderAction("PriceRange", "MoviesController");}
Run Code Online (Sandbox Code Playgroud)
我通过Google找到了一些例子,他们以相同的方式调用RenderAction助手,首先传递Action名称然后传递Controller名称.
我无法理解我在这里做错了什么.有人可以指出吗?
我试图从我的小型ASP.NET MVC 4应用程序切换到ASP.NET Core.
在我的MVC 4应用程序中,我有一个使用RenderSection的布局文件:
@RenderSection("xyz", required: false)
Run Code Online (Sandbox Code Playgroud)
然后,在我的索引文件中,我有:
@section xyz{
@{Html.RenderAction("abc");}
}
Run Code Online (Sandbox Code Playgroud)
所以,我从Index调用控制器动作方法abc().方法abc()传递模型对象并返回具有该模型的局部视图.我无法使用RenderPartial,因为它需要传递模型.
现在,在ASP.NET Core中,我没有RenderAction()方法.
我的问题是:如何从我的索引文件中调用控制器操作方法?是否有任何其他HTML助手(虽然我没有看到任何)?
.
Html.RenderAction如果子操作的类型与父操作的类型不同,调用Asp.Net MVC2应用程序似乎可以改变页面的mime类型.
下面的代码(在MVC2 RTM中测试),对我来说似乎很合理,application/json在调用时会返回类型的结果Home/Index.浏览器不会显示页面,而是会barf并询问您是否要下载它.
我的问题:我错过了什么吗?这是一个错误吗?如果是这样,最好的解决方法是什么?
控制器:
public class HomeController : Controller
{
public ActionResult Index()
{
ViewData[ "Message" ] = "Welcome to ASP.NET MVC!";
return View();
}
[ChildActionOnly]
public JsonResult States()
{
string[] states = new[] { "AK", "AL", "AR", "AZ", };
return Json(states, JsonRequestBehavior.AllowGet);
}
}
Run Code Online (Sandbox Code Playgroud)
视图:
<h2><%= Html.Encode(ViewData["Message"]) %></h2>
<p>
To learn more about ASP.NET MVC visit <a href="http://asp.net/mvc" title="ASP.NET MVC Website">http://asp.net/mvc</a>.
</p>
<script>
var states = <% Html.RenderAction("States"); %>;
</script>
Run Code Online (Sandbox Code Playgroud) 在Post上渲染视图后,在视图内调用RenderAction将调用Post方法.有没有办法指定我想调用Get方法而不是Post?
我的网站页面由两种内容组成.第一个是用户之间的变量,但对于所有页面都是常量.第二个是跨用户不变的,但在页面之间是可变的.这是一种常见的布局.将输出缓存应用于此类内容的最佳方法是什么?
据我了解,Html.Substitute助手与MVC2渲染管道不兼容,消除了旧的圆环缓存方式.
特异性水平会降低输出缓存的价值.同一用户不太可能在缓存输出的生命周期内多次查看同一页面.
互联网上有几次尝试,它们修改OutputCache属性并渲染子系统以支持替换.我发现的最好的就是这里.
但是,我发现的各种片段似乎都是非正式的实现,并且得不到很好的支持.另外,我倾向于怀疑如果将替换添加回MVC2管道那么容易,那就完成了.
action方法不会使用OutputCache属性进行标记,并且会返回一个包含多个Html.RenderAction调用的视图,这些调用将独立地引入缓存的内容.除了使用稍微重量级的含义之外RenderAction,它还会增加额外的间接层和代码味道.
您在MVC2中独立编写缓存内容的经历是什么?什么运作良好,什么没有?
outputcache partial-views donut-caching renderaction asp.net-mvc-2
我今天一直在将一个相当新的项目从ViewPages搬到Razor,一切似乎都很顺利.除了我试图使用Html.Action呈现用户控件,它不会呈现任何东西.
所以我有一个在Home/Index.cshtml中引用的Shared/_Layout.cshtml文件
Index.cshtml具有以下内容:
<article>
@Html.Action("LatestBlogsMainPanelWidget", "Blogs")
...
</article>
Run Code Online (Sandbox Code Playgroud)
我把陷阱放在BlogsController中,所以我知道这是被请求的.我也知道正在返回一个模型,视图引擎正在找到LatestBlogsMainPanelWidget,甚至正在运行一些伪Razor语法代码:@ {var s ="hello"; }
但是这个文件中的普通html没有进入浏览器.我也尝试了其他(以前工作)的部分,它们也不会出现(页面上的查看源确认它不存在).
我也试过替换@ {Html.RenderAction(...); } 没有成功.@ Html.Action的任何一侧都出现HTML,所以我知道Index.cshtml正在显示.
更诡异的_layout文件也有Html.Action命令和他们做似乎罚款.
我真的不确定还有什么要检查,或者如何确认管道正在获取HTML.任何人都可以帮忙吗?
谢谢!
我正试着带上我的菜单.
在我的_Layout.cshtml页面中
<div class="wrapper">
<!-- Navigation -->
@Html.RenderAction("Navigation", "Nav")
Run Code Online (Sandbox Code Playgroud)
导航控制器看起来像这样
public ActionResult Navigation()
{
var pages = pageRepository.Pages;
return View(pages);
}
Run Code Online (Sandbox Code Playgroud)
导航视图看起来像这样
@model IEnumerable<Site.Domain.Entities.Page>
@{
Layout = null;
List<Site.Domain.Entities.Page> pages = new List<Site.Domain.Entities.Page>();
foreach(var page in Model)
{
pages.Add(page);
}
}
@foreach (var link in Model)
{
if (link.ParentPage == "Home")
{
<li>@link.PageTitle</li>
<ul>
@foreach (var subLink in pages)
{
if (subLink.ParentPage == link.PageTitle)
{
<li>@subLink.PageTitle</li>
}
}
</ul>
}
}
Run Code Online (Sandbox Code Playgroud)
当我去.../nav/navigation时,视图工作正常
我想要做的是将它带入我的_Layout页面,以便我可以将它用作我的菜单.
我继续使用@ Html.RenderAction("导航","导航")出错
错误说"'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配'有一些无效的参数"
我应该使用它作为部分吗?最好的方法是什么?谢谢你的建议!
为什么这段代码是正确的:
@{
Html.RenderAction("PostImagesForPost", "BlogPost", new { id = Model.ID });
}
Run Code Online (Sandbox Code Playgroud)
而这段代码
@Html.RenderAction("PostImagesForPost", "BlogPost", new { id = Model.ID })
Run Code Online (Sandbox Code Playgroud)
通过此错误消息:
编译器错误消息:CS1502:'System.Web.WebPages.WebPageExecutingBase.Write(System.Web.WebPages.HelperResult)'的最佳重载方法匹配有一些无效的参数
为什么使用'{''}'这么重要?
谢谢
renderaction ×10
asp.net-mvc ×8
asp.net ×4
c# ×3
razor ×2
.net ×1
asp.net-core ×1
mime-types ×1
outputcache ×1
partials ×1