zoukankan      html  css  js  c++  java
  • ASP.NET MVC 中将数据从View传递到控制器中的三种方法(表单数据绑定)

    转自:http://www.cnblogs.com/zyqgold/archive/2010/11/22/1884779.html

    在ASP.NET MVC框架中,将视图中的数据传递到控制器中,主要通过发送表单实现的.具体使用中,主要使用以下三种方法.

    1、通过Request.Form读取表单数据        2、通过FormCollection读取表单数据        3、直接读取表单数据对象

    下边是我学习这些东西时的一点总结

    1、通过Request.Form读取表单数据

         首先定义一个Person类如下:

        public class Person
        {
            public string FirstName { get; set; }
            public string LastName { get; set; }
        }
    在HomeController中定义如下方法,用于接收View传来的数据:
            [AcceptVerbs(HttpVerbs.Post)]
            public ActionResult RequestForm()
            {
                Person person = new Person();
                person.FirstName = Request.Form["FirstName"];
                person.LastName = Request.Form["LastName"];
                return View(person);
            }
    这个方法通过Request.Form分别读取View传来的两个文本框"FirstName"和"LastName"中的数据,然后得到Person类实例化对象person.
    这些数据是HomeView传来的.实现表单的代码如下:
        <fieldset>
            <p>
                <%using (Html.BeginForm("RequestForm", "Home"))
                  {%>
                FirstName:<%=Html.TextBox("FirstName")%><br />
                LastName:<%=Html.TextBox("LastName")%>
                <input type="submit" name="提交" value="RequestForm" /><br />
                <%} %>
            </p>
        </fieldset>
    其中:Html.BeginForm("RequestForm", "Home")是MVC中的FormExtensions类中的扩展方法.第一个参数指明接收表单的Action,第二个参数指明接受表单的Controller.
    这条语句指明了Home Controller中的Action RequestForm接受了刚才传递来的数据.发送的表单数据两个文本框:"FirstName"和"LastName"
    点击提交按钮Submit后的结果如下:
    Request.Form

    可以看到,对象person成功接收了表单传来的数据.

    2、通过FormCollection读取表单数据

    ASP.NET MVC中的FormCollection对象是提交的Form中所有对象的集合.

    为了通过FormCollection读取表单数据,设置如下表单:

    <fieldset>
        <p>
            <%using (Html.BeginForm("FormCollection", "Home"))
              { %>
            FirstName:<%=Html.TextBox("FirstName")%><br />
            LastName:<%=Html.TextBox("LastName")%><br />
            <input type="submit" name="Submit" value="FormCollection" /><br />
            <%} %>
        </p>
    </fieldset>

    (Writer的插入代码块功能突然就不能用了,郁闷中.....)
    可以看出,处理表单的Action是HomeController中的FormCollection方法.发送的表单依然是来年改革文本框.
    FormCollection方法的实现如下:

    [AcceptVerbs(HttpVerbs.Post)]
           public ActionResult FormCollection(FormCollection formCollection)
           {
               Person person = new Person();
               person.FirstName = formCollection["FirstName"];
               person.LastName = formCollection["LastName"];
               return View(person);
           }

    FormCollection类型是传入Form中窗体值的提供程序(MSDN里边这么说的,不是很理解).FormCollection()方法中传入了FormCollection类型的参数,该参数会自动绑定表单中的所有数据.

    通过FormCollection可分别获取两个文本框中的数据,然后得到Person类的实例化对象person.结果如下:

    FormCollection

      

    3、直接读取表单数据对象

    为直接读取表单对象,设置如下表单:

    <fieldset>
           <p>
               <%using (Html.BeginForm("Person", "Home"))
                 { %>
               FirstName:<%=Html.TextBox("FirstName")%><br />
               LastName:<%=Html.TextBox("LastName")%><br />
               <input type="submit" name="Submit" value="Person" /><br />
               <%} %>
           </p>
       </fieldset>

    处理该表单的Action是HomeController中的Person方法.发送两个文本框中的数据.

    Person() 的实现如下:

    public class Person
    {
        public string FirstName { get; set; }
        public string LastName { get; set; }
    }

    在上述代码中,Person()方法中传入了Person类型参数,其内部读取了两个文本框中的"FirstName"和"LastName"中的数据,直接得到Person类的实例化对象person.
    程序的运行结果如下:

    直接读取

    直接读取表对象时,发送表单的文本框必须与数据对象属性的名称相一致(不区分大小写)

  • 相关阅读:
    【实用代码】圆弧边框、阴影
    2015.7.30 第十五课 sql(新建数据库、创建表、注释、查询语句、新增、更新、删除、联合查询)
    【转】WEB前端开发工程师成长之路(计划)
    2015.7.29 第十三、十四课 jq实例(磁力图片、轮播图、腾讯课堂菜单、可弹出红色菜单、砸蛋游戏)
    【周末作业】2015.7.15 第二周 css作业及答案
    【课堂实例】轮播图
    2015.7.23 第十二课 课程重点(jq元素:获取、添加、删除、设置、绑定、显示隐藏、回调、动画)
    2015.7.22 第十一课 课程重点(jq:元素获取、添加、删除、过滤、判断、遍历、取值,样式设置、改变对象、切换、判断)
    【其它】喜欢的歌汇总
    2015.7.21 第十课 课程重点(jq选择器:id、类、标签、奇偶、eq、nth-child、子元素、属性、包含、位置、过滤)
  • 原文地址:https://www.cnblogs.com/chengjun/p/5380471.html
Copyright © 2011-2022 走看看