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

简介:

在PartialView中进行表单提交,有什么用呢,我来总结一下:

1 这个表单不只一个地方用到

2 可能涉及到异步的提交问题

这两种情况都有可能需要把表单建立在“分部视图”中,我们为第二种情况为例来说一下用法
首先,我们有一个用户登陆的表单UserLogOn.cshtml,它在首页及产品列表页可能都提供了表现的情况,而这时,我们为了不违背DRY原则,所以会把相同的代码提取出来放到一个partial view中,这就是我们的UserLogOn.cshtml,而它里面只有视图的表现,没有任何提交的动作,因为它可能被提交到不同的Action中去。

实例选自大家都熟悉的MVC自带的项目

UserLogOn.cshtml代码如下:

 1 @Html.ValidationSummary(true, "Login was unsuccessful. Please correct the errors and try again.")
 2 
 3 @using (Html.BeginForm()) {
 4     <div>
 5         <fieldset>
 6             <legend>Account Information</legend>
 7 
 8             <div class="editor-label">
 9                 @Html.LabelFor(m => m.UserName)
10             </div>
11             <div class="editor-field">
12                 @Html.TextBoxFor(m => m.UserName)
13                 @Html.ValidationMessageFor(m => m.UserName)
14             </div>
15 
16             <div class="editor-label">
17                 @Html.LabelFor(m => m.Password)
18             </div>
19             <div class="editor-field">
20                 @Html.PasswordFor(m => m.Password)
21                 @Html.ValidationMessageFor(m => m.Password)
22             </div>
23 
24             <div class="editor-label">
25                 @Html.CheckBoxFor(m => m.RememberMe)
26                 @Html.LabelFor(m => m.RememberMe)
27             </div>
28 
29             <p>
30                 <input type="submit" value="Log On" />
31             </p>
32         </fieldset>
33     </div>
34 }

Index.cshtml中去调用它:

@Html.Partial("UserLogOn")

在HomeController中的Index方法(Action)中的代码可能是这样:

  
[HttpPost]
public ActionResult Index(LogOnModel model) { if (ModelState.IsValid) { if (MembershipService.ValidateUser(model.UserName, model.Password)) { FormsService.SignIn(model.UserName, model.RememberMe); if (Url.IsLocalUrl(returnUrl)) { return Redirect(returnUrl); } else { return RedirectToAction("Index", "Home"); } } else { ModelState.AddModelError("", "The user name or password provided is incorrect."); } } return View(); }

OK,事实上,在其他页面有可能也用到了UserLogOn这个视图,但它的POST提交可能是不同的,可能同时要做其它的事件,这时,我们就可以通过@Html.Partial把视力的内容显示出来,而后

来提交事件在哪一个Action里去写,这样可以很好的实现业务的分离。

小知识:

在MVC2.0中,老赵曾经提出过将SCPX分部视力的内容以字符的形式输出,而不是直接到页面的输出流去相应,而在MVC3.0时代,小微把这个功能进行了封装与整合,并提出了两个方法,分别去调用视图和Action:

@Html.Partial()

@Html.Action()

当然,也可以使用MVC2.0的输出流方法:

@{Html.RenderPartial();}

@{Html.RenderAction();}

本文转自博客园张占岭(仓储大叔)的博客,原文链接:爱上MVC3系列~分部视图中的POST,如需转载请自行联系原博主。

目录
相关文章
|
5月前
|
设计模式 存储 前端开发
MVC(模型-视图-控制器)是一种在Web应用程序开发中广泛使用的软件设计模式
【5月更文挑战第12天】MVC模式是Web应用开发中的常见设计模式,将逻辑、数据和界面分离,提升代码可维护性和重用性。模型处理数据逻辑,视图展示数据,控制器协调用户输入与模型视图交互。优点包括代码分离、易维护、可扩展和组件重用,促进高效灵活的开发。
50 2
|
XML 缓存 前端开发
Spring MVC视图解析器
Spring MVC视图解析器
79 1
|
5月前
|
前端开发 Java Spring
数据之桥:深入Spring MVC中传递数据给视图的实用指南
数据之桥:深入Spring MVC中传递数据给视图的实用指南
78 3
|
5月前
|
缓存 前端开发 Java
视图映射掌握:解析Spring MVC视图解析器的全方位指南
视图映射掌握:解析Spring MVC视图解析器的全方位指南
86 1
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新4
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新4
54 1
|
5月前
|
存储 设计模式 前端开发
请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
【2月更文挑战第26天】【2月更文挑战第89篇】请解释 Web 应用程序的 MVC(模型-视图-控制器)架构。
40 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新2
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新2
36 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新1
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新1
42 0
|
前端开发
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新3
前端学习笔记202305学习笔记第三十一天-什么是mvc-数据操作和视图更新3
56 0
|
JSON 前端开发 Java
《Spring MVC》 第四章 域对象、视图、转发和重定向
《Spring MVC》 第四章 域对象、视图、转发和重定向
92 0