是否可以嵌套部分视图?

Ann*_* L. 5 partial-views asp.net-mvc-3

我知道这个问题,但是原始海报接受了一个不涉及嵌套的解决方案。我肯定想嵌套部分视图(当然,除非有更好的方法)。

我有一个页面可以Ajax加载几个局部视图之一,具体取决于用户在主视图中的操作。(这些视图是局部的,因为我的理解是,如果您想从Ajax调用中加载大量其他内容,则需要从调用中返回PartialViewResult。)几个局部视图具有一个公共元素,即下拉菜单,我希望喜欢将自己的部分观点考虑在内。

但这是行不通的。每个局部视图都有一个关联的视图模型,即它们的模型。对于嵌套的部分视图,我想从父视图的视图模型传递单个字段的值(可为null的int)作为嵌套的部分视图的模型。

但是在运行时,我收到一条错误消息,说我的局部视图需要Nullable <int>但收到X,其中X是与父局部视图关联的视图模型的类型。

所以我的问题是双重的:

  1. 是否完全不允许嵌套局部视图?(在这种情况下,我希望框架会检查情况并抛出一个如此明确表示的错误。)

  2. 除了局部视图之外,是否有办法获得我希望的分解出的公共接口元素的效果?我已经考虑过但没有尝试创建一个编辑模板,因为我认为对于部分视图不起作用的内容对那些视图不起作用,但是我可能是错的。

ETA:我发现了我的问题:当您将模型的空值传递给HtmlHelper.Partial或RenderPartial时,假设您只是没有传递模型,则渲染引擎会代替调用的局部视图的模型来代替该空值。 。

在我的情况下,这是不正确的:我的Nullable <int>是Nullable,因为在设置之前,它为null!null在语义上有意义!

但这就是为什么我遇到问题。

dot*_*joe 5

是的,您可以嵌套部分视图。只要确保你传入了正确的模型。HtmlHelpers 在这里很有用,因为您可以使用完整的视图路径封装对 RenderPartial 的调用,并确保使用正确的模型。

例子

public static void RenderSomePartial(this HtmlHelper helper, int? i)
{
    helper.RenderPartial("~/Views/Shared/SomePartial.cshtml", i);
}
Run Code Online (Sandbox Code Playgroud)