欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ASP.NET中MVC传递数据的几种形式总结

程序员文章站 2024-02-14 10:59:58
本文实例讲述了asp.net中mvc传递数据的几种形式。分享给大家供大家参考。具体如下: 在asp.net mvc开发中,controller需要向view提供model...

本文实例讲述了asp.net中mvc传递数据的几种形式。分享给大家供大家参考。具体如下:

在asp.net mvc开发中,controller需要向view提供model,然后view将此model渲染成html。这篇文章介绍三种由controller向view传递数据的方式,实现一个dropdownlist的显示。

第一种:viewdata

viewdata是一个dictionary。使用非常简单,看下面代码:

public actionresult viewdataway(int id)
{
 book book =bookrepository.getbook(id);
 viewdata["countries"] = new selectlist(phonevalidator.countries, book.country);
 return view(book);
}

在view中使用下面代码取值:

<div class="editor-field">
    <%= html.dropdownlist("country", viewdata["countries"] as selectlist) %>
    <%: html.validationmessagefor(model => model.country) %>
</div>

上面代码使用as将它转换成selectlist。

处理post代码如下:

[httppost]
public actionresult viewdataway(int id, formcollection collection)
{
  book book = bookrepository.getbook(id);
  updatemodel<book>(book);
  bookrepository.save(book);
  return redirecttoaction("details", new { id=id});
}

第二种:viewmodel

使用viewmodel的方式,我们先创建一个bookviewmodel,代码如下:

public class bookviewmodel 
{ 
 public book book 
 { 
   get; 
   set; 
 } 
 public selectlist countries
 {
   get;
   set;
 }
 public bookviewmodel(book book)
 {
   book = book;
  countries = new selectlist(phonevalidator.countries,book.country);
 }
}

在控制器的aciton使用viewmodel存放数据的代码如下:

public actionresult viewmodelway(int id)
{
  book book = bookrepository.getbook(id);
  return view(new bookviewmodel(book));
}

在view中,这种方式比第一种方式好在:它支持智能感应。

效果和第一种方式一样。

第三种:tempdata

使用tempdata和使用viewdata方法是一样的。

action代码如下:

public actionresult tempdataway(int id)
{
   book book = bookrepository.getbook(id);
   tempdata["countries"] = new selectlist(phonevalidator.countries, book.country);
   return view(book);
}

view取值的代码如下:

<div class="editor-field">
  <%= html.dropdownlist("country", tempdata["countries"] as selectlist) %>
  <%: html.validationmessagefor(model => model.country) %>
</div>

效果:第一种方式一样。

tempdata和viewdata的区别

做个简单的测试看下看下tempdata和viewdata的区别

public actionresult test1() 
{ 
  tempdata["text"] = "1-2-3"; 
   viewdata["text"] = "1-2-3"; 
   return redirecttoaction("test2"); 
}
public actionresult test2()
{
   string text1 = tempdata["text"] as string;
  string text2 = viewdata["text"] as string;
   return view();
}

redirecttoaction跳转action后,viewdata的值已经被清空,而tempdata没有被清空,这是它们的区别之一。

希望本文所述对大家的asp.net程序设计有所帮助。