MVC流程
说明:在MVC中,客户端的所请求的URL是被映射到相应的Controller去,然后由Controller来处理业务逻辑,或许要从Model中取数据,然后再由Controller选择合适的View返回给客户端。
ViewBag,ViewData,TempData
**ViewBag和ViewData生命周期相同,仅对当前View有效,不同的是ViewBag的类型不再是字典的键值对结构,而是dynamic动态类型。
**ViewData是ViewDataDictionary 类型
**ViewBag是dynamic类型
public ActionResult Index() { ViewData["mytitle"] = "我是标题"; List<string> strs = new List<string> { "China","USA","DE","US"}; ViewData["jihe"] = strs; Dictionary<int, string> strss = new Dictionary<int, string>(); strss.Add(2, "China"); strss.Add(5, "DE"); strss.Add(7, "US"); ViewBag.adidasi = "阿迪达斯"; ViewBag.jihes = strss; return View(); }
@{ ViewBag.Title = "Index"; Layout = "~/Views/Shared/_Layout.cshtml"; } <h2>Index</h2> @foreach (var item in ViewData["jihe"] as List<string>) { <li>@item</li> } <hr> @ViewBag.adidasi @foreach (var item in ViewBag.jihes) { <li> @item.Key":"@item.Value </li> }
**TempData
1) TempData保存在Session中,Controller每次执行请求的时候,会从Session中先获取TempData,而后清除Session,获取完TempData数据,虽然保存在内部字典对象中,但是其集合中的每个条目访问一次后就从字典表中删除。
2)具体代码层面,TempData获取过程是通过SessionStateTempDataProvider.LoadTempData方法从ControllerContext的Session中读取数据,而后清除Session,故TempData只能跨Controller传递一次。
3)如果我们想读取TempData的值但是又不让它被删除,可以使用TempData.Peek("Key")方法。如果想再保持一次TempData里面的值,可以使用TempData.Keep("Key").
RenderBody()
原文:https://www.cnblogs.com/youguess/p/12256782.html