MVC传值——Controller向View传值(一)

    这几天一直在鼓捣传值的这个东西,之前只知道个ViewDataViewBag,其他的就不会了。在之前学习ViewDataViewBag的时候,只传了简单的一个字符串。可是现在,我们要传递的数据不仅仅是字符串啊,可能是一个List对象,也可能是Json串。于是做了一些小例子,总结一下传值的经验。


    ControllerView传值的主要有4种:ViewDataViewBagTempDataModel。当然我们还可以添加JS代码进行传值。


    一、使用ViewData进行传值


     ViewData就是一个字典,它存放的是键值对。只对当前的View有效.


    1、传递字符串


    controller代码: 

 public ActionResult Index()
        {
            ViewData["MessageOne"] ="Hello Cindy,I send the message to you by using the ViewData!";   
            return View();
         }
 

    

    页面代码:


<h3>@ViewData["MessageOne"]</h3>

     

    2、传递list对象


     controller代码:

 

public ActionResult Index()
        {      
          var person =new List<string>
           {
               "Cindy",
                "23",
                "Girl"
          };
           ViewData["Person"] =person;
         }
 

     

    页面代码:


<h3>Hello,Cindy!Isend you a list by using the ViewData:</h3>
<ul>
    @foreach (var person in(List<string>) ViewData["Person"])
    {
        <li>
            @person
        </li>
    }
</ul>


   二、使用ViewBag进行传值


    ViewBag存放的不是键值对,是dynamic动态类型,它不需要转型就可以使用里面的值。


    1、传递字符串


     controller代码: 

public ActionResult Index()
        {
            ViewBag.MessageOne = "Hello Cindy,I send the message to you by usingthe ViewBag!";   
            return View();
         }

    页面代码:


<h3>@ViewBag.MessageOne</h3>


    2、传递list对象


     controller代码:

public ActionResult Index()
        {      
          var person =new List<string>
           {
               "Cindy",
                "23",
                "Girl"
          };
           ViewBag.Person = person;
         }
 


     页面代码:

 

<h3>Hello,Cindy!Isend you a list by using the ViewBag:</h3>
<ul>
    @foreach (var person in  ViewBag.Person)
    {
        <li>
            @person
        </li>
    }
</ul>

    三、使用TempData进行传值

 

     TempData其实和ViewData的用法类似,但是TempData可以用于不同View之间的传值,而不向ViewData一样只对当前的View有效。


     controller代码:


public ActionResult Index()
        {
            this.TempData["MyName"] ="Cindy"; 
            return View();
         }
 
 public ActionResult Index1()
        {
            string MyName ;
 
            MyName=this.TempData["MyName"].ToString ();
            return View();
        }
 

    页面绑定:和ViewData绑定一样。

 

    注意当我们第一次访问Index页面之后,再访问Index1的时候,在Index1页面就会绑定上值“Cindy,但当我们刷新Index1页面的时候,值就消失了。

 

    四、使用Model进行传值

 

    通过model来进行传值是通过强类型来进行绑定的,我们只需在View中通过Model对应的属性就可以获得相应的指。

    首先,我们在Model文件夹下,建立一个model,类名为PersonModel.cs。

     

 public partial  class PersonModel
    {
        public string name { get; set; }
        public int age { get; set; }
        public string sex { get; set; }
    }

    紧接着,在controller中写入:

    

public ActionResult Index()
  {  
     PersonModel person = new PersonModel();
     person.age = 23;
     person.name = "cindy";
     person.sex = "gril";
           
     return View(person);
  }

   然后,在页面中通过Model的属性来获取属性的值。

   

   <h3>Name:@Model.name</h3>
   

   最后,看效果图:

   

MVC传值——Controller向View传值(一)_第1张图片


    五、AJAX代码进行ControllerView之间的传值

     

    Controller代码:

 

public JsonResult JsonDemo()
        {
            var person = new
            {
                Name = "Cindy",
                Age = 23,
                Sex = "Girl"
            };
            return Json(person);
        } 
 

     JS代码:

 

$(function () {
    $.ajax({
        type: "POST",
        dataType: "json",
        url: "/GetDataFrom/JsonDemo",
        success: function (data) {
            if (data.length < 1) {
                alert("没有查到数据"); 
            }
                contentName = data.Name;
               document.getElementById("name").innerHTML = "您的姓名为:"+contentName;
 
                contentSex = data.Sex;
               document.getElementById("sex").innerHTML = "您的性别为:"+contentSex;
 
                contentAge = data.Age;
               document.getElementById("age").innerHTML = "您的年龄为:" + contentAge;
 
        },
    });
});

    以上代码中的URL指的是controller中要传值的方法。data,为返回的数据。后面我们将返回的数据绑定到View中相应的id上即可显示数据。如果要将传值类型改为GET的话,我们就要在Controller返回值类型的参数中加入, JsonRequestBehavior.AllowGe,要不然页面是无法获取值的。

      

总结:


    自己动手敲例子,虽然花了不少时间,但是也值了,相比第一次写来说,速度快了很多,可以自己写代码了。当我没有弄出来的时候,觉得这个东西怎么这么难啊,可是当我做出来的时候,我就又会觉得这个东西其实挺简单的,我怎么用了这么长时间啊。还是写代码写的少,以后要看API文档,多动手自己写代码。


    总结一句话:多动手实践,成功就离我不远了。


你可能感兴趣的:(MVC传值——Controller向View传值(一))