如何使用Ajax加载以HTML呈现的完整部分视图(所以我只设置了div.html)
我需要一个Ajax调用来调用控制器操作,它将呈现一个完整的局部视图(红色),并将其附加到当前加载的视图的末尾?
[我知道如何附加到DOM以及如何进行Ajax调用]
我需要知道什么是最好的管道方法,操作应该返回什么类型的操作结果,如果有一个内置的机制来避免重新发明轮子?
- return Partialview("_PartialViewName)并使用$.load调用返回partialview的控制器方法
- 从从Ajax调用的控制器操作返回partialView作为actionResult?会返回呈现的HTML吗?这样我就可以把它放到DIV中了。
- 你不需要ajax,只要用$.load。
- 好的,谢谢,我需要研究一下.load是如何使用的。谢谢+ 1
- 任何时候…快乐编码:)
- @Guruprasad Rao建议使用$(selector).load(url,data,callback);是目前最好的解决方案。
ASP.NET MVC中有内置的Ajax帮助程序,可以涵盖基本场景。
您需要安装并引用jquery.unobtrusive-ajaxjavascript库(+jquery依赖项)。然后在主视图(比如index.cshtml)中输入以下代码:
索引文件
1 2 3 4 5 6 7
| @Ajax.ActionLink("Load More Posts","MorePosts", new AjaxOptions()
{
HttpMethod ="GET",
AllowCache = false,
InsertionMode = InsertionMode.InsertAfter,
UpdateTargetId ="posts-wrapper"
}) |
注:@Ajax.ActionLink助手接受AjaxOptions参数进行更多的自定义。
在控制器(比如homecontroller.cs)中,您应该返回PartialViewResult:
1 2 3 4 5
| public ActionResult MorePosts(int? offset, int? count)
{
IEnumerable<Post> posts = myService.GetNextPosts(offset, count);
return PartialView(posts);
} |
最后定义moreposts.cshtml部分视图:
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| @model IEnumerable<Post>
@{
Layout = null;
}
@foreach (var post in Model)
{
>@post.Prop1
@post.Prop2
<hr />
} |
就是这样。当一些用户点击Load More按钮时,将加载更多的文章。
注1:您可以实现OnBegin功能来实现决定下一个要加载的日志的实际逻辑(例如,获取上一个加载日志的ID并将其发送到服务器)。
注2:使用自定义jQuery.ajax调用(不使用jquery.unobtrusive)可以获得相同的结果。唯一的区别是手动Ajax调用和单击事件。
希望这有帮助。如果需要,我可以写一个更完整的例子。
- 这与我的黑莓手册的方法使呼叫使用Ajax时,美元就可以知道全.ajax track errors。谢谢
- Please请@维克多how to make this美国导游手册参数自动呼叫as与which we will not get on Main View。
我建议从nuget获取Westwind.Web.Mvc库,您可以将任何视图运行到字符串中,作为JSON结果返回。
1 2 3 4 5 6
| public JsonResult GetPosts()
{
string postsHtml = ViewRenderer.RenderPartialView("~/views/yourcontroller/_PostsPartial.cshtml",model);
return Json(new { html = postsHtml });
} |
正如@guruprasad在评论中所说,您可以使用return PartialView(model)从MVC控制器返回部分视图,但使用renderpartialview,您可以将其作为字符串输出,并在需要时将其与任何其他值一起输出为json。如果您选择使用WebAPI,这将有效,因为它不具备呈现内置视图的能力。
- 你可以进入HTML渲染全部粘在JSON的物业?这是方便的。viewrenderer.renderpartialview is also方便。谢谢,我会查厂for this。
- 读你的帖子invisiblepanda @?它不让它(这)样partialview does the view,renders out to a字符串。
- 如果你使用webapi You probably不应该回来,好的HTML。
- "我freedomn米高度disagree with that声明
- ASP.NET MVC和Web API控制器和controllers are the same thing in the latest基本版本,他们都是统一的。
- 卢克只是因为茶有"双控制器的句法相似的意思他们不均值for the same thing。Web API to handle is!商业逻辑,whereas ASP.NET MVC的View/presentation should处理逻辑。以保存你的业务层分离的关注,should not the view of定义你的布局,例如,HTML。of this is the the福利消费能力to the same在多不同的API,vastly前端应用。for instance,Windows应用程序# 10 C,安安和浏览器应用程序的HTML 5,含Objective-C的程序。
- 我@丹that this with You to同意趋势不好茶的最佳实践,它会更好,那么返回值和render to the standard with or something to a角。不管一个人多,关注的是在分离of the play with the壳层和modularisation of the is not necessarily尾巴,什么使你通过the values to view。在这房子是分离,the the view is between the渲染和生成viewmodel is for the view that仍然分离,这只是你使用the method to HTML产生不同的最终结果。你不同意吗?
- 它是真正的"卢克,there may be when both the时代逻辑和业务逻辑在Web API reside the presentation and the前端项目,应用"模拟"presenter which is just吐出来的结果。虽然在这神奇的房子,为什么你有一个前端应用在所有?当there may be some缓存相关的原因,使静电to on the pages for高scalability服务器的方法与启动,就不会recommend consideration没有认真。处理客户需求给你regardless of error to You can never建筑的决定,我真的,真的有一个"愚蠢"的前端。
- 卢克也",for which the original Comment with context,你disagree高度stated [ D ]""You probably be HTML不应该回来","You should not不返回HTML"。我认为这是公平的说回来commonly is the less有用的HTML设计。
- 对不起,如果我似乎在混乱位,有一些啤酒!我想make the Point is that the logic view是曼弗雷迪或法拉利吗或是业务逻辑应该在webapi reside说恩,我不应该。有一个简单的方式提供给webapi from within a view to。the view is the view that和我仍然可以作为模型is generated from the商务逻辑层controllers between that can be shared webapi controllers和MVC。
- 我也喜欢我的disagree to change):somewhat disagree高度