Ann*_* L. 5 partial-views asp.net-mvc-3
我知道这个问题,但是原始海报接受了一个不涉及嵌套的解决方案。我肯定想嵌套部分视图(当然,除非有更好的方法)。
我有一个页面可以Ajax加载几个局部视图之一,具体取决于用户在主视图中的操作。(这些视图是局部的,因为我的理解是,如果您想从Ajax调用中加载大量其他内容,则需要从调用中返回PartialViewResult。)几个局部视图具有一个公共元素,即下拉菜单,我希望喜欢将自己的部分观点考虑在内。
但这是行不通的。每个局部视图都有一个关联的视图模型,即它们的模型。对于嵌套的部分视图,我想从父视图的视图模型传递单个字段的值(可为null的int)作为嵌套的部分视图的模型。
但是在运行时,我收到一条错误消息,说我的局部视图需要Nullable <int>但收到X,其中X是与父局部视图关联的视图模型的类型。
所以我的问题是双重的:
是否完全不允许嵌套局部视图?(在这种情况下,我希望框架会检查情况并抛出一个如此明确表示的错误。)
除了局部视图之外,是否有办法获得我希望的分解出的公共接口元素的效果?我已经考虑过但没有尝试创建一个编辑模板,因为我认为对于部分视图不起作用的内容对那些视图不起作用,但是我可能是错的。
ETA:我发现了我的问题:当您将模型的空值传递给HtmlHelper.Partial或RenderPartial时,假设您只是没有传递模型,则渲染引擎会代替调用的局部视图的模型来代替该空值。 。
在我的情况下,这是不正确的:我的Nullable <int>是Nullable,因为在设置之前,它为null!null在语义上有意义!
但这就是为什么我遇到问题。
是的,您可以嵌套部分视图。只要确保你传入了正确的模型。HtmlHelpers 在这里很有用,因为您可以使用完整的视图路径封装对 RenderPartial 的调用,并确保使用正确的模型。
例子
public static void RenderSomePartial(this HtmlHelper helper, int? i)
{
helper.RenderPartial("~/Views/Shared/SomePartial.cshtml", i);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
6592 次 |
| 最近记录: |