学习笔记:Asp.Net MVC更新部分页面
Asp.Net MVC 更新部分页面
设想我们有一篇文章下面的提交评论时如何只刷新评论内容部分,
方法一,利用ajax通过js代码实现。
方法二,利用Ajax.BeginForm()+部分视图实现。
通过js代码的方法比较常见,这里主要是探讨通过Ajax.BeginForm()+部分视图的方式实现。这样还可提高该视图的重用性。同理,有多处引用的零部件或页面部分内容更新等,也可以利用此方法实现。
Step1,创建生成Form的Action,代码如下:
[ChildActionOnly()]
public PartialViewResult _CommentForm(Int32 SessionID)
{
Comment comment = new Comment() { SessionID = SessionID };
//假定这里待评论文章的ID ,
//将评论文章ID传至视图,用隐藏字段保存起来,以便提交评论时取出来
return PartialView("_CommentForm", comment);
}
响应请求Form的Action
注意方法返回类型PartialViewResult,最后返回的是return PartialView,而不是普通的View。
Step2,请求评论列表的方法,代码如下:
public PartialViewResult _GetForSession(Int32 SessionID)
{
//假定这里待评论文章的ID
ViewBag.SessionID = SessionID;
//评论列表数据
List<Comment> comments = context.Comments.Where(c => c.SessionID.Equals(SessionID)).ToList();
return PartialView("_GetForSession", comments);
}
请求评论列表的方法
Step3,处理“发表评论”的POST请求
[ValidateAntiForgeryToken()]
public PartialViewResult _Submit(Comment comment)
{
context.Comments.Add(comment);
context.SaveChanges();
ViewBag.SessionID = comment.SessionID;
List<Comment> comments = context.Comments.Where(c => c.SessionID.Equals(comment.SessionID)).ToList();
return PartialView("_GetForSession", comments);
}
发表评论
Step4,添加部分视图
//_CommentForm.cshtml中代码 @model MvcApplication1.Models.Comment @Html.HiddenFor(m=>m.SessionID)
<div>
@Html.LabelFor(m=>m.Content)
@Html.EditorFor(m=>m.Content) </div>
<button type="submit">Submit Commment</button> //_GetForSession.cshtml中的代码 @model IEnumerable<MvcApplication1.Models.Comment>
<div id="comments">
<ul>
@foreach (var comment in Model)
{
<li>@comment.Content</li>
}
</ul>
<!-----------------------------部分更新关键代码------------------------------------------------------------>
@using (Ajax.BeginForm("_Submit", "Comment", new AjaxOptions() { UpdateTargetId = "comments" }))
{
@Html.AntiForgeryToken();
@Html.Action("_CommentForm", new { SessionId = ViewBag.SessionID }); }
</div>
注意,@using (Ajax.BeginForm("_Submit", "Comment", new AjaxOptions() { UpdateTargetId = "comments" }))中UpdateTargetId即是指要刷新的页面中的元素Id,这里非常关键。
当然啦,要想使用Ajax.BeginForm,一定不要忘记添加对JQuery和jquery.unobtrusive-ajax这两个包的引用。
这里可以这样引用@Scripts.Render("~/bundles/jquery");@Scripts.Render("~/bundles/jqueryval");
不明白这两句代码意思的同学可打开App_Start/BundleConfig.cs中一看便知。
bundles.Add(new ScriptBundle("~/bundles/jquery").Include(
"~/Scripts/jquery-{version}.js")); bundles.Add(new ScriptBundle("~/bundles/jqueryui").Include(
"~/Scripts/jquery-ui-{version}.js")); bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
"~/Scripts/jquery.unobtrusive*",
"~/Scripts/jquery.validate*"));
这三个包是vs2013中默认添加的。其作用大概就是在服务器将多个js文件打包,页面加载的时候只会请求一次,而不是之前的每一个js文件单独请求一次,有助于页面加载速度。
至此,部分视图刷新功能初步实现。
学习笔记:Asp.Net MVC更新部分页面的更多相关文章
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理
系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会ASP.NET MVC (二)——ASP.NET MVC 数据传递 七天学会ASP.NET MVC (三)— ...
- Dynamic CRM 2013学习笔记(二十四)页面保存前进行逻辑验证
我们有时要验证下页面上的一些逻辑,比如开始时间不能晚于结束时间,不对时不让保存.我们可以在相关的字段事件上处理,但这如果要判断的字段比较多时,就比较麻烦了. 这时候我们就可以利用Form的OnSave ...
- thinkphp学习笔记7—多层MVC
原文:thinkphp学习笔记7-多层MVC ThinkPHP支持多层设计. 1.模型层Model 使用多层目录结构和命名规范来设计多层的model,例如在项目设计中如果需要区分数据层,逻辑层,服务层 ...
- 【问题】Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数
[问题]Asp.net MVC 的cshtml页面中调用JS方法传递字符串变量参数. [解决]直接对变量加引号,如: <button onclick="deleteProduct('@ ...
- 七天学会ASP.NET MVC (五)——Layout页面使用和用户角色管理 【转】
http://www.cnblogs.com/powertoolsteam/p/MVC_five.html 系列文章 七天学会ASP.NET MVC (一)——深入理解ASP.NET MVC 七天学会 ...
- Pro ASP.NET MVC 5 Framework.学习笔记.6.3.MVC的必备工具
每个MVC程序员的军火库中,都有这三个工具:一个依赖注入(DI)容器,一个单元测试框架,一个模拟工具. 1.准备一个示例项目 创建一个ASP.NET MVC Web Application的Empty ...
- <转>ASP.NET学习笔记之理解MVC底层运行机制
ASP.NET MVC架构与实战系列之一:理解MVC底层运行机制 今天,我将开启一个崭新的话题:ASP.NET MVC框架的探讨.首先,我们回顾一下ASP.NET Web Form技术与ASP.NET ...
- 学习“迷你ASP.NET MVC框架”后的小结
看蒋老师MVC的书第二个大收获可以是算是看了这个迷你ASP.NET MVC框架了,虽然它远不如真正ASP.NET MVC(下文简称“MVC”)那么复杂庞大,但在迷你版中绕来绕去也够呛的.这部分我看了几 ...
- [原创]java WEB学习笔记25:MVC案例完整实践(part 6)---新增操作的设计与实现
本博客为原创:综合 尚硅谷(http://www.atguigu.com)的系统教程(深表感谢)和 网络上的现有资源(博客,文档,图书等),资源的出处我会标明 本博客的目的:①总结自己的学习过程,相当 ...
随机推荐
- 《Entity Framework 6 Recipes》中文翻译系列 (18) -----第三章 查询之结果集扁平化和多属性分组
翻译的初衷以及为什么选择<Entity Framework 6 Recipes>来学习,请看本系列开篇 3-14 结果集扁平化 问题 你有一对多关联的两个实体,你想通过一个查询,获取关联 ...
- 【Prince2是什么】PRINCE2认证之Prince2衡量绩效的六大要素
之前一篇文章已经跟大家从体系上讲解了PRINCE2和PMP的差异,那接下来我们进行第二讲,PRINCE2中讲到的衡量绩效的要素是什么呢? 第一,成本:即项目必须是所能负担的起的 第二,时间:即项目 ...
- com.android.build.api.transform.TransformException: com.android.builder.packaging.DuplicateFileException: Duplicate files copied in APK assets/com.xx.xx
完整的Error 信息(关键部分) Error:Execution failed for task ':fanwe_o2o_47_mgxz_dingzhi:transformResourcesWith ...
- windows7查看最近使用记录
1.看计算机在哪天运行过~运行了多久! C:\Windows\SchedLgU.txt 2.看你最近运行过什么程序: C:\Windows\Prefetch 3.看你最近打开过什么文件(非程序)和文件 ...
- iOS----自定义UIView,绘制一个UIView
绘制一个UIVIew最灵活的方式就是由它自己完成绘制.实际上你不是绘制一个UIView,你只是子类化了UIView并赋予子类绘制自己的能力.当一个UIVIew需要执行绘图操作的时,drawRect:方 ...
- SpringMVC常用的注解
1. @Controller @Controller用于标识控制层主键,负责注册一个bean到spring上下文,bean的ID默认为首字母小写的类名称,用户也可以自定义. 例如: 方式一: @Co ...
- thinkPHP入门
什么是框架 框架就是一定结构的代码,框架提供一个开发web程序的基础架构以及常用的功能 代码,PHP框架的web程序开发拜倒了流水线上. php框架就是一定要按别人规定好的架构编写. php开发框架有 ...
- 解决FragmentTabHost切换标题栏变更问题
现在都流行FragmentTabHost布局.但是所有的fragment都是共享一个actionbar,但是我们又想给每个fragment定义自定义的标题栏.百度google了好久也没有找到解决方案. ...
- Util应用程序框架公共操作类(四):验证公共操作类
为了能够验证领域实体,需要一个验证公共操作类来提供支持.由于我将使用企业库(Enterprise Library)的验证组件来完成这项任务,所以本文也将演示对第三方框架的封装要点. .Net提供了一个 ...
- winform中textbox属性Multiline=true时全选
1.文本框右键属性 => 添加KeyDown事件. 2.添加如下代码: private void txt_result_KeyDown(object sender, KeyEventArgs e ...