1、基础知识梳理

时间:2023-01-29 14:44:21

1、TempData、ViewData、ViewBag之间的区别:

区别如下:
  TempData:TempDataDictionary的一个实体,保存在Session中,也是以键值对的结构存在。
  ViewData: ViewDataDictionary的一个实体,以键值对的结构存在。
  ViewBag: dynamic([daɪ'næmɪk])动态类型,能够动态解析
 
如下代码:
string[] items = new string[] { "one", "two", "three" };
ViewBag.Items = items;
ViewData["Items"] = items;
由调试可以发现:

1、基础知识梳理

ViewBag中用的是dynamic类型,因此可以自动根据数据类型转换。
1、基础知识梳理
<ul>
    @foreach (dynamic p in ViewBag.Items)
    { 
        <li>The item is: @p</li>
    }
</ul>
1、基础知识梳理

而ViewData中用的是object对象,要自己去强制转换类型才可以遍历使用。

1、基础知识梳理
<ul>
    @foreach (string a in (string[])ViewData["Items"])
    { 
        <li>The item is: @a</li>
    }
</ul>
1、基础知识梳理
 
如下,有两个Action方法:
public ActionResult Index()
{
    this.TempData["Name"] = "Julian";
    return View();   
}
public ActionResult Index2()
{
    string name = this.TempData["Name"] as string;
    return View();   
}

Index()中,给TempData添加了一个键值对。假设请求了这个Action后,接着请求Index2这个Action。则可以在Index2中,获取到TempData的键值对的信息。
有趣的是,如果再一次请求Index2,那么从TempData中读取到的Name的值为Null。

 
通过上面几个简单的例子,我们可以从生命周期来看:
(1).ViewData和ViewBag的生命周期和View相同,只能在当前View中使用。当本次请求结束后,就会自动清空值。
(2).TempData则可以在不同的Action中进行传值,类似Webform中的Session,TempData的值在取了一次后则会自动删除
   TempData的特性就是可以在两个Action之间传递数据,它会保存一份数据到下一个Action,并随着再下一个Action的到来而失效。所以它被用在两个Action之间来保存数据。比如,这样一个场景,你的一个Action接受一些post的数据,然后交给另一个Action来处理,并显示到页面,这时就可以使用TempData来传递这份数据。

 

2、左连接

 -- 总结:左连接where只影向右表,右连接where只影响左表。

 -- 例子:select * from tbl1 Left Join tbl2 where tbl1.ID = tbl2.ID     左连接后的检索结果是显示tbl1的所有数据和tbl2中满足where 条件的数据