是否可以嵌套部分视图?
我意识到这个问题,但原始海报接受了一个不涉及嵌套的解决方案。 我绝对想要嵌套部分视图(当然,除非有更好的方法)。
我有一个页面,可以Ajax加载几个部分视图之一,这取决于用户在主视图中的操作。 (这些视图是部分的,因为我的理解是,如果你想从Ajax调用中加载重要的附加内容,则需要从调用中返回一个PartialViewResult。)几个部分视图有一个公共元素,一个下拉列表,喜欢把它分解成它自己的部分观点。
但是这不起作用。 我的部分视图都有一个关联的视图模型,这是他们的模型。 对于嵌套的局部视图,我想从父视图的视图模型中传递一个单个字段的值,一个可为空的int,作为嵌套局部视图的模型。
但是在运行时,我得到一个错误,说我的局部视图需要一个Nullable <int>,但接收到X,其中X是与父局部视图关联的视图模型的类型。
所以我的问题是双重的:
是否不允许嵌套部分视图? (在这种情况下,我希望框架能检查情况并抛出一个明确表示的错误。)
有没有一种方法可以获得我想要的效果,除了使用局部视图之外,还可以使用一个已分解的通用界面元素? 我已经考虑过,但没有尝试过创建编辑模板,因为我相信对部分视图不起作用的东西对于这些不起作用,但我可能是错的。
ETA:我发现我的问题:当您将模型的空值传递给HtmlHelper.Partial或RenderPartial时,渲染引擎会将调用分部视图的模型替换为null,假设您只是未传递模型。
在我的情况下,这不是真的:我的Nullable <int>是Nullable,因为在设置它之前它是空的! null在语义上是有意义的!
但这就是我遇到问题的原因。
是的,你可以嵌套部分视图。 只要确保你通过了正确的模型。 HtmlHelpers在这里很有用,因为你可以用完整的视图路径封装对RenderPartial的调用,并确保使用正确的模型。
例
public static void RenderSomePartial(this HtmlHelper helper, int? i)
{
helper.RenderPartial("~/Views/Shared/SomePartial.cshtml", i);
}
是的你可以。 如果你需要传递模型,它可能会有点混乱。 如果您使用强类型模型,请尝试使用DisplayTemplates或EditorTemplates而不是部分。
你可以在你的父视图中使用渲染部分,并调用一些子视图,当你从父视图调用一个部分视图时,你可以传递数据与视图包你从控制器传递给父视图的数据可以传递给子视图我使用视图包将我的数据发送到子视图
链接地址: http://www.djcxy.com/p/50943.html上一篇: Is it possible to nest partial views?
下一篇: How do I manage MVC areas and RenderAction in different controllers?