ASP.NET MVC实践系列12-表单处理

简介:

其实这应该算是一个很简单的话题,但是由于webform为我们封装的太多,很多人对这部分的原理并不是特别清楚,搞得这个表单提交在ASP.NET MVC中好像很神秘似得,下面我就来帮大家揭揭秘,当然高手就别看了会浪费你的时间的。

一、基础知识

HTTP请求有两种方式GET与POST,理论上说,GET是从服务器上请求数据,POST是发送数据到服务器。事实上,GET方法是把数据参数队列(query string)加到一个URL上,名字和值是一一对应的。比如说,name=lfm。在队列里,各组数据用一个&符号分开,空格用+号替换,特殊的符号转换成十六进制的代码。因为这一队列在URL里边,这样队列的参数就能看得到,可以被记录下来,或更改。通常GET方法还限制字符的大小(我测试了一下大概4083,大于4083直接被截断,不报错 )。事实上POST方法可以没有限制的传递数据到服务器,用户在浏览器端是看不到这一过程的。接下来要讲的这个表单提交使用的就是post方式。

二、CheckBox

1、Html.CheckBox:这是ASP.NET MVC中提供的一个Helper,它会生成一个input-checkbox和一个同名的input-hidden,比方说我们的view为:

 

代码
<% using (Html.BeginForm( " HtmlCheckBox " " Home " ))
      {
%>
    
<% = Html.CheckBox( " lfm1 " %>
    
< input  type ="submit"  value ="提交"   />
    
<% %>

 

则会生成:

 

代码
   < form  action ="/Home/HtmlCheckBox"  method ="post" >
< input  id ="lfm1"  name ="lfm1"  type ="checkbox"  value ="true"   />
< input  name ="lfm1"  type ="hidden"  value ="false"   />
    
< input  type ="submit"  value ="提交"   />
    
</ form >

 

为什么要有这么一个input-hidden呢,我们都知道checkbox在提交时如果不选中则将不被提交到服务器端,所以有时我们可能希望如

果不选中也提交到服务器端,这个input-hidden就是干这个的,不过这里实现的有点蹩脚,当选中时会有两个同名的表单项,一个值

为TRUE,一个值为FALSE。
当controller为如下时:
 public ActionResult HtmlCheckBox(FormCollection formCollection)
        {
            return Content(Request["lfm1"]);
        }
如果选中checkbox,则得到“true,false”,如果不选中checkbox则得到“false”。如果你需要用到不选也要提交的情况可以使用

这个helper,但一般还是推荐大家直接使用<input type="checkbox">。

 对于这个helper的使用大家可以参考如下代码:

View

 

复制代码
代码
     <% using (Html.BeginForm( " HtmlCheckBox " " Home " ))
      {
%>
    
<% = Html.CheckBox( " lfm1 " %>
    
<% = Html.CheckBox( " lfm2 " %>
     
<% = Html.CheckBox( " lfm3 " %>
    
< input  type ="submit"  value ="提交"   />
    
<% %>
复制代码

 

Controller:

 

代码

 

2、<input type="checkbox">

我们先添加一个View:

 

复制代码
视图
<% using (Html.BeginForm( " TestCheckBox " " Home " ))
  {
%>
   
< input  type ="checkbox"  name ="lfm"  value ="1"   />
    
< input  type ="checkbox"  name ="lfm"  value ="2"   />
     
< input  type ="checkbox"  name ="lfm"  value ="3"   />
      
< input  type ="checkbox"  name ="lfm"  value ="4"   />
       
< input  type ="checkbox"  name ="lfm"  value ="5"   />
       
< input  type ="submit"  value ="提交"   />
<% %>
复制代码

 

这里要注意所有的Input的name都相同,Html.BeginForm("TestCheckBox", "Home")的意思是当此表单提交的时候会提交到

HomeController的TestCheckBox这个Action方法中。我们添加这个方法:

 

复制代码
Action
  public  ActionResult TestCheckBox( int [] lfm)
         {
             
string  t = "" ;
             
foreach  (var item  in  lfm)
             {
                 t 
=  t  +  item.ToString();
             }
             
return  Content(t);
         }
复制代码

 

 

为了简单,TestCheckBox方法的参数名需要与input的名字相同,于是mvc自动帮我们将你选择的checkbox的value值匹配到参数数组

中,当然你可以通过Request获得,不过这样的话需要你自己进行处理。

三、RadioButton
RadioButton的用法就比较简单了,我们举个简单的例子:
View:

 

复制代码
View
<% using (Html.BeginForm( " RadioResult " , " Home " ))
  { 
%>
    
<% = Html.RadioButton( " lfm " " 1 " ) %>
 
<% = Html.RadioButton( " lfm " " 2 " ) %>
 
< input  type ="submit"  value ="提交"   />
 
<% %>
复制代码

 

Controller:

 

复制代码
代码
  public  ActionResult HtmlRadioButtonTest()
        {
            
return  View();
        }
        
public  ActionResult RadioResult()
        {
            
return  Content(Request[ " lfm " ]);
        }
复制代码

 

得到的结果就是你选中RadioButton的值。这个helper和 <input type="radio" value=1 />版本用法是基本一样的。
四、应用

View:

 

代码

 

Controller:

 

复制代码
代码
public  ActionResult NewsList()
        {
            
return  View(ListNews.GetList());
        }
        
public  ActionResult NewsListResult( int [] ID)
        {
            
string  result  =   " 选中的ID " ;
            
foreach  (var item  in  ID)
            {
                result 
=  result  +   " , "   +  item;
            }
            
return  Content(result);

        }
            
复制代码

 

 

 

我的ASP.NET MVC实践系列

ASP.NET MVC实践系列1-UrlRouting

ASP.NET MVC实践系列2-简单应用

ASP.NET MVC实践系列3-服务器端数据验证

ASP.NET MVC实践系列4-Ajax应用

ASP.NET MVC实践系列5-结合jQuery

ASP.NET MVC实践系列6-Grid实现(上)

ASP.NET MVC实践系列7-Grid实现(下-利用Contrib实现)

ASP.NET MVC实践系列8-对查询后分页处理的解决方案

ASP.NET MVC实践系列9-filter原理与实践

ASP.NET MVC实践系列10-单元测试

ASP.NET MVC实践系列11-FCKEditor和CKEditor的使用

其他:

在ASP.NET MVC中对表进行通用的增删改

 

本文转自 你听海是不是在笑 博客园博客,原文链接:http://www.cnblogs.com/nuaalfm/archive/2009/11/30/1613712.html  ,如需转载请自行联系原作者

相关文章
|
3月前
|
人工智能 开发框架 .NET
如何掌握.NET技术,引领开发前沿:.NET技术的核心能力、在现代开发中的应用实践、以及如何通过.NET技术实现持续创新。
.NET技术已成为软件开发不可或缺的部分,本文分三部分探讨:核心能力如多语言支持、统一运行时环境、丰富的类库及跨平台能力;现代开发实践包括企业级应用、Web与移动开发、云服务及游戏开发;并通过性能优化、容器化、AI集成等方面实现持续创新,使开发者站在技术前沿。
60 3
|
17天前
|
开发框架 缓存 算法
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
开源且实用的C#/.NET编程技巧练习宝库(学习,工作,实践干货)
|
24天前
|
Cloud Native API C#
.NET云原生应用实践(一):从搭建项目框架结构开始
.NET云原生应用实践(一):从搭建项目框架结构开始
|
2月前
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
35 7
|
3月前
|
jenkins 测试技术 持续交付
解锁.NET项目高效秘籍:从理论迷雾到实践巅峰,持续集成与自动化测试如何悄然改变游戏规则?
【8月更文挑战第28天】在软件开发领域,持续集成(CI)与自动化测试已成为提升效率和质量的关键工具。尤其在.NET项目中,二者的结合能显著提高开发速度并保证软件稳定性。本文将从理论到实践,详细介绍CI与自动化测试的重要性,并以ASP.NET Core Web API项目为例,演示如何使用Jenkins和NUnit实现自动化构建与测试。每次代码提交后,Jenkins自动触发构建流程,通过编译和运行NUnit测试确保代码质量。这种方式不仅节省了时间,还能快速发现并解决问题,推动.NET项目开发迈向更高水平。
45 8
|
3月前
|
Kubernetes 监控 Devops
【独家揭秘】.NET项目中的DevOps实践:从代码提交到生产部署,你不知道的那些事!
【8月更文挑战第28天】.NET 项目中的 DevOps 实践贯穿代码提交到生产部署全流程,涵盖健壮的源代码管理、GitFlow 工作流、持续集成与部署、容器化及监控日志记录。通过 Git、CI/CD 工具、Kubernetes 及日志框架的最佳实践应用,显著提升软件开发效率与质量。本文通过具体示例,助力开发者构建高效可靠的 DevOps 流程,确保项目成功交付。
66 0
|
3月前
|
人工智能 前端开发 开发工具
NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践
.NET技术自2000年推出以来,在软件开发领域扮演着关键角色。本文从核心优势出发,探讨其统一多语言平台、强大工具集、跨平台能力及丰富生态系统的价值;随后介绍.NET在企业级应用、Web开发、移动应用、云服务及游戏领域的创新实践;最后分析性能优化、容器化、AI集成等方面的挑战与机遇,展望.NET技术的未来发展与潜力。
57 2
|
2月前
|
存储 开发框架 前端开发
ASP.NET MVC 迅速集成 SignalR
ASP.NET MVC 迅速集成 SignalR
48 0
|
3月前
|
Java Spring UED
Spring框架的异常处理秘籍:打造不败之身的应用!
【8月更文挑战第31天】在软件开发中,异常处理对应用的稳定性和健壮性至关重要。Spring框架提供了一套完善的异常处理机制,包括使用`@ExceptionHandler`注解和配置`@ControllerAdvice`。本文将详细介绍这两种方式,并通过示例代码展示其具体应用。`@ExceptionHandler`可用于控制器类中的方法,处理特定异常;而`@ControllerAdvice`则允许定义全局异常处理器,捕获多个控制器中的异常。
46 0
|
3月前
|
开发框架 前端开发 .NET
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
ASP.NET MVC WebApi 接口返回 JOSN 日期格式化 date format
42 0