首页 文章

是否可以嵌套部分视图?

提问于
浏览
4

我知道this question,但原始海报接受的解决方案并没有更好的方法 . )

我有一个页面,可以Ajax加载几个部分视图之一,具体取决于用户在主视图中的操作 . (视图是部分的,因为我的理解是,如果你想从Ajax调用加载重要的附加内容,你需要从你的调用返回一个PartialViewResult . )几个局部视图有一个共同的元素,一个下拉列表,我想喜欢将其纳入自己的局部视野 .

但这不起作用 . 我的部分视图每个都有一个关联的视图模型,这是他们的模型 . 对于嵌套的局部视图,我想从父视图的视图模型中传递单个字段(可为空的int)的值作为嵌套的局部视图的模型 .

但是在运行时我得到一个错误,说我的部分视图需要Nullable <int>但是接收到X,其中X是与父部分视图关联的视图模型的类型 .

所以我的问题是双重的:

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

  • 除了部分视图之外,有没有办法获得我想要的效果,一个分解出来的公共界面元素?我已经考虑过,但没有尝试过,创建一个编辑模板,因为我相信那些不适用于部分视图的内容对那些不起作用,但我可能是错的 .

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

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

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

3 回答

  • 0

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

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

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

  • 4

    您可以在父视图中使用render partial并调用一些子视图,当您从父级调用部分视图时,您可以使用视图包传递数据从控制器传递到父视图的数据可以传递到子视图我使用视图包来将我的数据发送到子视图

相关问题