ITPub博客

首页 > Linux操作系统 > Linux操作系统 > ASP.NET MVC实践系列-表单处理

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

原创 Linux操作系统 作者:iDotNetSpace 时间:2009-11-30 14:56:55 0 删除 编辑

其实这应该算是一个很简单的话题,但是由于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-hidden呢,我们都知道checkbox在提交时如果不选中则将不被提交到服务器端,所以有时我们可能希望如

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

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

这个helper,但一般还是推荐大家直接使用。


 

2、

我们先添加一个View:

 

视图
<%using (Html.BeginForm("TestCheckBox", "Home"))
  {%>
  
   
    
     
      
      
<%} %>
 

这里要注意所有的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")%>
 
 <%} %>
 

Controller:

 

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

得到的结果就是你选中RadioButton的值。这个helper和 版本用法是基本一样的。
四、应用

View:

 

代码
 

NewsList

   


       

           


           
           
           
       
<%using (Html.BeginForm("NewsListResult", "Home"))
  {%>
    <% foreach (var item in Model)
       { %>
   
       

           


           
           
           
       
   
    <% } %>
   
<%} %>
   

                选择
           

                Author
           

                Title
           

                CreateTime
           

               
           

                <%= Html.Encode(item.Author)%>
           

                <%= Html.Encode(item.Title)%>
           

                <%= Html.Encode(String.Format("{0:g}", item.CreateTime))%>
           

 

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);

        }
           
 

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12639172/viewspace-620998/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-01-04

  • 博文量
    2376
  • 访问量
    5766223