2010-03-09 101 views
0

我有一个MVC视图,其中包含大量的部分视图。这些部分视图使用部分请求填充,因此视图本身的控制器不会向它们传递任何数据。如果某个操作在另一个视图中触发,是否有可能在其中一个部分视图中重新加载数据?例如,一个局部视图有一个jqGrid,我想在用户在这个网格中选择一个新行时刷新另一个局部视图中的数据。 有没有这种情况下的代码示例(在C#中),我可以看看我做错了什么?我使用ajax调用来触发一个新的请求,但部分视图中的非视图被刷新,所以我不确定问题是否与路由,控制器有关,或者甚至根本不可能! 谢谢!ASP .NET MVC部分视图和路由

回答

3

如果您的部分视图操作返回ViewResult,则该响应将包含一个HTML块。但是,Ajax调用不会自动将结果插入到DOM中,因为结果可能是任意数量的格式,并且/或者在DOM更新之前可能需要额外的处理。因此,为了获得刷新的局部视图,您需要将Ajax调用的结果插入DOM树中的正确位置。

jQuery有一个漂亮的load()方法,它会为你封装这个过程。它将进行Ajax调用,获取结果并替换选定元素的内部HTML。如果您需要以任何方式转换结果,您甚至可以将它自己的函数传递给它,然后将它插入到DOM树中。

附注:jQuery.load()strips scripts returned in the result。它确实保留它们以在某些场景中执行,但它甚至在其他场景中不执行它们。所以,如果你的部分视图包含脚本,你可以考虑自己更新DOM树。

所有这一切都与您的C#代码无关,该代码在服务器端运行。

但是,通过检查请求是纯HTML还是可以让您的操作变得更加智能,因此结果将直接由浏览器呈现,或者如果是Ajax调用,结果将会是在进入DOM之前由您的脚本处理。该检查使用Request扩展方法IsAjaxRequest完成。