今天做项目的时候发现了个问题,是关于RenderAction和RenderPartial的,它们在MVC2的时候就出现了,不是MVC3的新东西,那为什么要拿出来说呢,其主要原因在于,我对它们的了解在MVC3时代有了更上一层的认识,呵呵。

先说一下他们的作用:

RenderAction:渲染分部视图到页面上,他要求你提供一下Action的名称和Controller的名称

RenderPartial:渲染分部视图到页面上,他要求你提代一个分部视图的名称,即它的路径,如果是当然Controller下或者Shared下的页面,直接写它的名称即可

再说一下他们的区别:

RenderAction:它是走controller下的action方法的,即走[HttpGet]特性的方法(默认下就是HttpGet)

RenderPartial:他不走controller下的action方法,即使你有这个方法,他也不会走,但一般使用RenderPartial时,都是把数据写在页面上的,它的action方法完全多余。

下面是一个表单提交的实现,它是使用分部视图完成的表单模块,它有两个action,以便去实现GET请求和POST请求,看代码:

 1         /// <summary>
 2         /// 用户登陆
 3         /// </summary>
 4         /// <returns></returns>
 5         public ActionResult UserLogOn()
 6         {
 7             return View(new UserLogOnModel());
 8         }
 9         [HttpPost]
10         public ActionResult UserLogOn(UserLogOnModel entity)
11         {
12             if (ModelState.IsValid)
13             {
14                 VM = user_InfoManager.UserLogOn(new User_Info { Email = entity.Email, Password = entity.Password });
15                 if (VM.IsComplete)
16                 {
17                     return RedirectToAction("Index", "Home");
18                 }
19                 else
20                 {
21                     VM.ToList().ForEach(i => ModelState.AddModelError("", i));
22                 }
23             }
24
25             return View();
26         }

而在页面视图上,通过视图模型UserLogOnModel进行页面元素的填充及表单验证,在默认情况下,我们把模型赋了默认值(就是表单元素input上的value)

 1     /// <summary>
 2     /// 用户登陆
 3     /// </summary>
 4     public class UserLogOnModel
 5     {
 6         public UserLogOnModel()
 7         {
 8             this.Email = "登陆名";
 9             this.Password = "密码";
10         }
11         [Required]
12         [DataType(DataType.EmailAddress)]
13         [Display(Name = "邮箱")]
14         public string Email { get; set; }
15         [Required]
16         [DataType(DataType.Password)]
17         [Display(Name = "密码")]
18         public string Password { get; set; }
19     }

当页面上触发POST事件后,就会到HTTPOST对应的action上,进行处理,ModelState是指视图模型的状态,如果验证不通过,它的IsValid属性为false,并且它会自动绑定到表单元素

上,这一样都是基于MVC的,前台代码可能是这样:

 1 @model TsingDa.Ask.Models.UserLogOnModel
 2 @{Layout = "";}
 3 @using (Html.BeginForm("UserLogOn", "Home", FormMethod.Post, new { id = "LogOn" }))
 4 {
 5     @Html.ValidationSummary(true)
 6     <div class="editor-field">
 7         @Html.TextBoxFor(m => m.Email)
 8         @Html.ValidationMessageFor(m => m.Email)
 9     </div>
10     <div class="editor-field">
11         @Html.TextBoxFor(m => m.Password)
12         @Html.ValidationMessageFor(m => m.Password)
13     </div>
14     <input type="button" id="logOnBtn" value="登陆" />
15 }
16 <script type="text/javascript">
17     $("#logOnBtn").click(function () {
18         $.ajax({
19             url: "/Home/UserLogOn",
20             data: $("#LogOn").serialize(),
21             type: "POST",
22             success: function (data) {
23                 $("#LogOn").html(data);
24             }
25         });
26     });
27 </script>

注意,如果有多个视图中的表单分别有提交动作,必须使用AJAX方法,不能使用表单自己的SUBMIT方式,否则mvc会分不清你到底提交给谁,这也很正常。

OK,现在就算一个页面上有多个表单,我们使用RenderAction把业务分开处理,用AJAX提交方法分别进行POST提交就可以了。

本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC3系列~RenderAction与RenderPartial及一个页面多个表单提交,如需转载请自行联系原博主。

爱上MVC3系列~RenderAction与RenderPartial及一个页面多个表单提交相关推荐

  1. asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!)...

    asp.net使用post方式action到另一个页面,在另一个页面接受form表单的值!(报错,已解决!) 原文:asp.net使用post方式action到另一个页面,在另一个页面接受form表单 ...

  2. django一个html先后两个form,django 一个页面两个表单 怎么提交

    收到一只叮咚 1234567891011121314151617181920212223242526272829办法1.同一个页面中建立两个表单 各自提交: 1234567812345678办法2:如 ...

  3. Asp.net中一个页面多个表单的解决方案

    <form id="form1" runat="server"> <input name="TrueName" type= ...

  4. 爱上MVC3系列~分部视图中的POST

    在PartialView中进行表单提交,有什么用呢,我来总结一下: 1 这个表单不只一个地方用到 2 可能涉及到异步的提交问题 这两种情况都有可能需要把表单建立在"分部视图"中,我 ...

  5. 爱上MVC3系列~同步与异步提交,在过滤器里如何进行重定向~续

    回到目录 上一篇文章已经解决了同步与异步表单提交的页面重定向问题,而为什么要写个"续"呢,原因是,我觉得上次的代码不够美丽,而且有些啰嗦,也不符合我的代码之美原则,所以,我自己的代 ...

  6. 让一个网页打开的同时自动为另一个网页自动填写表单并提交

    让一个网页打开的同时自动为另一个网页自动填写表单并提交   if  you  use  "window.open"  to  open  the  window,you  can  ...

  7. 表单提交时submit验证非空return false没用_开发这样一个复杂的表单你需要用多久...

    表单在中后台开发的时,是最多也是最另人头疼的,多级联动,繁杂的验证,动态解析等可算是苦不堪言.所以出现了无数的表单解决方案,像Uform, formily, NoForm等等一大堆用来解决中后台开发表 ...

  8. 使用php创建一个注册表单,如何实现一个简单的注册表单

    创建一个注册表单是非常容易的 - 它事实上意味着,你只需要创建一个表单,表单将更新一些User的模型对象(这个例子是一个Doctrine实体)并保存它. 受欢迎的FOSUserBundle 提供了一个 ...

  9. PHP表单提交后页面跳转,PHP在表单提交后重定向到另一个页面

    PHP在表单提交后重定向到另一个页面 我已经阅读了有关将 Headers 插入到php表单文件中的所有帖子,以便在提交表单后将用户重定向到另一个URL - 但我无法弄清楚如何执行此操作 . 以下是我的 ...

  10. html表单提交不判断,请问jquery有方法可以判断一个表单提交之后结果是成功或不成功吗?...

    具体是这样的,今天在做项目的时候用到layer弹出插件,我弹出的是一个iframe层.我用了ajax提交,通过ajax提交后的回调判断提交是否成功,成功就调用parent.layer.close(in ...

最新文章

  1. 温控自动烘焙系统的研究与实现
  2. android窗口速度条,android 改变ViewPager切换页面时的速度
  3. 插入排序:表折半插入
  4. mybatis生成工具
  5. python情感分析模型_Python有趣|中文文本情感分析
  6. 利用Python中的GDAL和OGR模块实现shapefile对栅格DEM数据的裁剪
  7. 创建dataframe_Spark原理与实战(五) Spark核心数据抽象DataFrame
  8. python学习:包导入教程
  9. Win10编译OpenJDK源码
  10. CSAPP第五章家庭作业(原书第二版)
  11. 如果你看ARCore看的一脸懵的话,就来看看这个,带你入门
  12. R语言的graphics画图功能
  13. 怎么屏蔽还有照片_在朋友圈发男神照片没屏蔽父母,老妈的回应亮了
  14. 【理财入门一】三大资产与财务自由
  15. 用php进行联查,Thinkphp使用join联表查询的方法
  16. 使用python解压缩rar、zip文件
  17. 离散数学 2. 范式、推理
  18. 软件系统安全性测试列表(Checklist)
  19. 同城货运烽火再燃,B端市场成货运市场新赛点
  20. 高中学计算机都是学什么,计算机有哪些专业主要学什么

热门文章

  1. Appscan计划扫描与扩展程序
  2. 苹果Safari中保存的密码如何导入Chrome浏览器?
  3. 6 大主流 Web 框架优缺点对比
  4. Redis中的lru算法实现
  5. 自动化瓦力多渠道打包python脚本
  6. Linux wpa_cli 调试方法
  7. rocketmq--push消费过程
  8. 快速自检电脑是否被黑客入侵过(Windows版)
  9. 调用百度地图 API 移动地图时 maker 始终在地图中间 并根据maker 经纬度 返回地址...
  10. Red5边源服务器集群部署