zoukankan      html  css  js  c++  java
  • asp.netMVC中,视图层和控制器层的传值

    Asp.Net Mvc 控制器与视图的数据传递
    
    
    摘要:本文将讨论asp.net mvc框架中的数据传递。
       
    
        数据传递也就是控制器和视图之间的交互,比如在视图中提交的数据,在控制器怎么获取,或者控制器从业务层获得一些数据,怎么传递到视图中,让视图显示在客户端呢?带着这些疑问,我们接着看。。
       
         下面分别讲解asp.net mvc框架中有三种数据传递方式,分别是:ViewData,TempData,Model
       
          ViewData:只能在一个动作方法中设置,在相关视图页面读取,说得再白一点就是只能在一个页面中使用。
        
         例 在Action方法中设置:ViewData["Message"]="Test";
            在视图中读取:  <%=Html.Encode(View["Message"]) %>
       
          TempData:TempData和ViewData有一点区别,ViewData只是单个视图有效,而TempData则是两个视图有效,就是说TempData是可以在两个视图中传递的,如果中间没有更新TempData的值的话,那么从第二个视图显示之后,TempData所保存的数据就会丢失。(注:也就是说,只有更新过的,以及新添加的键值对才能再下次request中继续使用),微软为什么要这样做呢,应该是为了节省资源吧!因为我们都知道http是无状态的,每次请求的时候,他都要重新保存TempData的值(利用session保存,顺便提一下,asp.net mvc里面的session对象和web from是一样的),但他又为了不想浪费资源,所以就只保存一次!使用方式和ViewData一致,就把ViewData关键字换成TempData即可,在这里就不列出代码了!
    
           Model:通过设置,读取ViewData和TempData属性,可以将数据从视图传到控制器,也可以从控制器传到视图,看起来好像已经够用了,但必需说明的是ViewData和TempData都是弱类型的,所以编码的时候极容易出错。这时我们可以通过在控制器的View()方法中,传递实例化的对象(例:View(类型)),传递实例化对象,由于是强类型原因,在视图读书时就有代码智能感应,有利于代码的书写和减少错误!除了在Action里面View的返回时需要带上实例化对象外,在页面还需要设置,在Add View时,会弹出以下这个窗口
    
    Asp.Net Mvc 控制器与视图的数据传递 - Ss_Andy - 什么都要试一下,这才是人生
    
    在用红色的线圈出来的下拉菜单中输入对象的类型即可,在页面使用的时候就直接[Model.属性]就可以了!
    
    例:<%=Html.Encode(Model.Name) %>
    
     
    
    接着我们看看怎么从视图把数据传到控制器,有好几种方式
    
     第一:通过Request.Form读取表单
    
         读取视图中文本框的值
    
        例:   <% =Html.TextBox("Name") %>     视图代码
    
               Request.Form["Name"] ;                   控制器中Action代码
    
    第二:通过FormCollection读取
    
         读取视图文本框的值
    
    例:   视图代码
    
        <% using (Html.BeginForm("About","Home"))
           { %>
        <%=Html.TextBox("Name")%>
        <input type="submit" value="submit" name="submit" />
        <%}%>
    
      控制器代码
    
       public ActionResult About(FormCollection form)
       {
                string s = form["Name"];
                return View();
      }
    
     
    
    通过本文的讨论,相信大部分朋友都可以掌握基本的应用了,当然,我也可能会理解错其中的一些东西,希望大家指出,欢迎讨论!
    有些梦想是遥不可及的,除非你坚持!
  • 相关阅读:
    RHEL6.x 删除Oracle11g
    通过IPV6上QQ及自建IPV6代理的方法
    Carrier frequency and EARFCN
    FDD LTE frequency band allocations
    Cmake参考资料
    sigal & mq_notify
    哈夫曼编码与解码
    哈夫曼数与哈夫曼编码
    算法做题顺序
    我的大学
  • 原文地址:https://www.cnblogs.com/softmans/p/3286970.html
Copyright © 2011-2022 走看看