如何为局部视图创建单独的控制器和模型?我希望能够将该部分视图放置在网站的任何位置,以便它需要它自己的控制器。我目前的渲染部分作为这样在ASP.NET MVC中为局部视图创建控制器
@Html.Partial("_Testimonials")
如何为局部视图创建单独的控制器和模型?我希望能够将该部分视图放置在网站的任何位置,以便它需要它自己的控制器。我目前的渲染部分作为这样在ASP.NET MVC中为局部视图创建控制器
@Html.Partial("_Testimonials")
为什么不使用Html.RenderAction()
?
然后,你可以把下列任何控制器(甚至为它创建一个新的控制器):
[ChildActionOnly]
public ActionResult MyActionThatGeneratesAPartial(string parameter1)
{
var model = repository.GetThingByParameter(parameter1);
var partialViewModel = new PartialViewModel(model);
return PartialView(partialViewModel);
}
然后,你可以创建一个新的局部视图,有你的PartialViewModel
是它从继承。
剃刀,在视图中的代码块应该是这样的:
@{ Html.RenderAction("Index", "Home"); }
对于WebFormsViewEngine,它应该是这样的:
<% Html.RenderAction("Index", "Home"); %>
renderaction的唯一功能是当然,它使第二个请求,而renderpartial做它作为相同的初始请求的一部分。 9/10次无所谓但值得注意。请参阅http://stackoverflow.com/questions/719027/renderaction-renderpartial获取一点背景 – 2011-06-09 08:19:08
在vbhtml中,我在@ Html.RenderAction(“MyActionThatGeneratesAPartial”,“Home”)上收到错误“Expression does not produce a value” ' – KyleMit 2014-10-29 23:17:26
@kylemit是你的代码吗? '@ {Html.RenderAction(“Index”,“Home”); }' – 2014-10-29 23:18:54
如果是我,我会简单地创建一个动作一个新的控制器,然后代替部分使用的RenderAction:
// Assuming the controller is named NewController
@{Html.RenderAction("ActionName",
"New",
new { routeValueOne = "SomeValue" });
}
它并不需要它自己的控制器。你可以使用
@Html.Partial("../ControllerName/_Testimonials.cshtml")
这允许你从任何页面渲染部分。只要确保相对路径是正确的。
为什么会被拒绝?假设是需要一个单独的控制器来在网站的任何页面上呈现部分内容。这不是真的。你可以从任何控制器渲染一个局部。这是一个有效的答案 – Slick86 2011-06-09 01:30:54
只是猜测,无论谁低估你可能想要一个视图模型去部分视图,并将其创建到一个单独的专用控制器。您的示例在没有viewmodel的情况下效果很好,但强制当前(全部)控制器创建/填充视图模型并将其传递给局部 – 2014-01-07 13:39:40
不要忘记扩展名:Html.Partial(“../ControllerName/_Testimonials.cshtml“) – JoshYates1980 2014-09-04 19:43:29
最重要的是,创建的动作必须返回部分视图,请参见下文。
public ActionResult _YourPartialViewSection()
{
return PartialView();
}
http://www.c-sharpcorner.com/article/html-action-and-html-renderaction-in-Asp-Net-mvc/ – 2017-08-28 07:41:35