Asp.net mvc 3 是否可以嵌套局部视图?

Asp.net mvc 3 是否可以嵌套局部视图?,asp.net-mvc-3,partial-views,Asp.net Mvc 3,Partial Views,我知道,但最初的海报接受了一个不涉及嵌套的解决方案。我当然希望嵌套局部视图(当然,除非有更好的方法) 我有一个页面,根据用户在主视图中的操作,可以用Ajax加载几个部分视图中的一个。(视图是局部的,因为我的理解是,如果您想从Ajax调用中加载重要的额外内容,您需要从调用中返回PartialViewResult。)几个局部视图有一个公共元素,一个下拉列表,我想将其分解成它自己的局部视图 但这不起作用。我的每个局部视图都有一个关联的视图模型,即它们的模型。对于嵌套局部视图,我想从父视图的视图模型中传

我知道,但最初的海报接受了一个不涉及嵌套的解决方案。我当然希望嵌套局部视图(当然,除非有更好的方法)

我有一个页面,根据用户在主视图中的操作,可以用Ajax加载几个部分视图中的一个。(视图是局部的,因为我的理解是,如果您想从Ajax调用中加载重要的额外内容,您需要从调用中返回PartialViewResult。)几个局部视图有一个公共元素,一个下拉列表,我想将其分解成它自己的局部视图

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

但在运行时,我得到一个错误,指出我的局部视图需要一个可为空但已接收的X,其中X是与父局部视图关联的视图模型的类型

所以我的问题有两个:

  • 是否不允许嵌套局部视图?(在这种情况下,我希望框架能够检查这种情况,并抛出一个明确的错误。)

  • 除了局部视图之外,有没有其他方法可以获得我想要的效果,即一个经过分解的公共接口元素?我曾经考虑过创建一个编辑模板,但没有尝试过,因为我相信对局部视图不起作用的东西对那些视图也不起作用,但我可能错了

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

    这在我的例子中是不正确的:我的Nullable是Nullable的,因为在它被设置之前,它是null的!null在语义上是有意义的


    但这就是我遇到问题的原因。

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

    范例

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

    是的,你可以。如果你需要传递模型,它可能会变得有点混乱。如果您使用的是强类型模型,请尝试使用DisplayTemplates或EditorTemplates而不是partials。

    您可以在父视图中使用render partial并调用一些子视图 您还可以通过查看包传递数据 从父视图调用局部视图时,从控制器传递到父视图的数据可以传递到子视图
    我使用查看包将我的数据发送到子视图

    谢谢!这帮我解决了我的问题!为了响应您的编辑:您必须将null强制转换为可为null的int,比如
    (int?)null
    @dotjoe,这与传递int类型的模型属性或变量会有不同的效果吗?正好有一个空值?因为我就是这么做的。我会想如果一个null转换为int?一个已经是int类型的变量会起作用吗?会有用的。但事实并非如此。是的,这也应该行得通……这和我的答案没什么不同……奇怪。