ViewBag.CurrentTime等同于ViewData["CurrentTime"] 如果在ViewData["Key"]中存放一个值,那么不能使用ViewBag访问。 例如: @Html.TextBox("name",ViewBag.Name)。 要使这行代码通过编译有两种办法: 一是使用ViewData["Name"] 二是把ViewBag.Name值转换为一个具体的类型:(string)ViewBag.Name
ViewBag, ViewData十分类似,都可用于把数据从controller传递到view。 ViewBag是WebViewPage中的一个属性,它的类型是dynamic。 从内部实现上,ViewBag属性是按照键值对那样存放在ViewData中的,因此也可以通过方为ViewData中值来访问ViewBag的值,他们指向的引用是同一个的。 但是区别在于,ViewData的写法是按照序列访问那样,通过索引访问,而ViewBag是通过属性访问。事实上,在编译阶段,编译器无法知道ViewBag所给的属性是否存在,这都是在运行时决定的。 举个例子,ViewData["Index"]可以写成:ViewBag.Foo,而不需要担心编译时错误。 我们可以通过下面的例子来验证ViewBag和ViewData其实指向的对象是同一个。 的类型是 @ViewBag.GetType(); ViewData的类型是 @ViewData.GetType(); ViewBag.XXX 的值是 @ViewBag.XXX ViewData[
ViewBag 派生自 DynamicViewData,因此它可使用点表示法 (@ViewBag.SomeKey = ) 创建动态属性,且无需强制转换。 ViewBag 的语法使添加到控制器和视图的速度更快。 ViewBag 更易于检查 NULL 值。 示例:@ViewBag.Person?. 使用示例 创建Action:ViewBagDemo public IActionResult ViewBagDemo() { ViewBag.Title = "ViewBag传值示例"; ViewBag.Name = "ken"; ViewBag.Birthday = new DateTime(2000, 1, 1); ViewBag.Hobby = new string as String[]; }
.NET MVC第三章、三种传值方式 目录 .NET MVC第三章、三种传值方式 ViewData 传递方法 前台接收 ViewData测试 ViewBag 传递方法 前台接收 ViewBag测试 ViewBag ViewBag对象是ASP.NET MVC 3提供的功能,它被声明为一个dynamic类型。 [Dynamic] public dynamic ViewBag { get; } 传递方法 ViewBag.Info = "我是通过ViewBag传递的值"; 前台接收 @ViewBag.Info ViewBag测试 传递以及取值成功 TempData·支持夸函数 ViewData属性与ViewBag属性无法跨Action方法传递数据,当需要在多个Action方法之间传递数据时,可采用TempData
本文列举以下三种,主要传递一些简单的数据,集合类型数据最好用Model对象或者JSON串 ViewBag ViewData TempData ViewBag: public ActionResult = "@ViewBag.User.Unit.Id"; var userId = "@ViewBag.User.Id"; var userName = "@ViewBag.User.Name"; var userPwd = "@ViewBag.User.Password"; 页面直接引入: @ViewBag.User.Name ViewData: public ActionResult 理论上ViewBag要比ViewData慢一点点,但是几乎可以忽略,所以使用何种方式完全取决于个人的爱好。 TempData的使用同ViewData和ViewBag一样,TempData也可以用来向视图传递数据,只是ViewData和ViewBag的生命周期和View相同,它们只对当前的View有用。
= Request.QueryString["userName"]; ViewBag.pwd = pwd; return View(); } 视图层
ViewBag.sName1 = Configuration["StudentList:0:sName"];//json数组 ViewBag.sName2 = Configuration ["StudentList:1:sName"]; ViewBag.Default = Configuration["Logging:LogLevel:Default"];//json LinkID=397860 *@ @{ }
ViewBag.Title 的值: @ViewBag.Title
ViewBag.MyKey的值: @ViewBag.MyKey
ViewBag.sName1的值: @ViewBag.sName1
ViewBag.sName2的值: @ViewBag.sName2
ViewBag.Default的值: @ViewBag.Default
运行测试效果 Startup 类 ASP.NET Core 应用使用 Startup 类,按照约定命名为 Startup= _testService.GetList(""); ViewBag.guid = _testService.MyProperty; ViewBag.guid11 = testService11.MyProperty; ViewBag.guid2 = _testService2.MyProperty; ViewBag.guid22 = testService22.MyProperty; ViewBag.guid3 = _testService3.MyProperty; return ) {
eg1: 如果想在一个表单中显示价格,可以用下边的控制器代码: public ActionResult Edit(int id){ ViewBag.Price=10.0; return View(); } 在相应的视图中,使用 ViewBag 中的值来为 TextBox 辅助方法命名,可以实现渲染显示价格的文本框: @Html.TextBox("Price") 将会生成如下的HTML标记 控制器代码: public ActionResult Edit(int id){ ViewBag.Album = new Album{Price=11}; return View(); album.GenreId); return View(album); } 视图中的代码: @Html.TextBox("Title",Model.Title) 辅助方法在查找强类型模型对象之前,会首先查看ViewBag ,如果ViewBag中有Title,那就会接收ViewBag中的Title
publicActionResult DemoExpressions() { ViewBag.ProductCount = 1; ViewBag.ExpressShip = true; ViewBag.ApplyDiscount = false; ViewBag.Supplier = null; return View(product); } 然后,我们创建强类型的视图 <divdata-discount=”@ViewBag.ApplyDiscount“data-express=”@ViewBag.ExpressShip :<inputtype=”checkbox”checked=”@ViewBag.ApplyDiscount“/> Express:<inputtype=”checkbox”checked=”@ViewBag.ExpressShip (ViewBag.ProductCount == 1) { Low stock (@ViewBag.ProductCount) }else{ @ViewBag.ProductCount
[HttpPost] public ActionResult ShowRangeDataPage(ReportDataListRequest request) { ViewBag.Year = request.Year ; ViewBag.CommentElementValue = request.CommentElementValue; ViewBag.CommentUnitValue = request.CommentUnitValue ; ViewBag.CommentUnitCode = request.CommentUnitCode; ViewBag.CommentUnitType = request.CommentUnitType ; ViewBag.dataType = request.dataType; return View(); } 前端ShowRangeDataPage页面调用post传的参数。 ', CommentUnitType: '@ViewBag.CommentUnitType', dataType: '@ViewBag.dataType' }, success: function
ViewBag,ViewData,ViewDataDictionary,任意强类型.. = "Index"; }
您可以把视图模板需要的动态数据 (参数)在控制器中放入到一个ViewBag对象中,然后视图模板可以访问这个对象。 ViewBag是一个动态的对象,这意味着在您没有给ViewBag放置属性时,它没有任何属性,您可以把任何您想放置的对象放入到 ViewBag对象中。 = "Hello " + name; ViewBag.NumTimes = numTimes; return View(); } } } 现在ViewBag对象包含了数据,并将自动传递给视图模板。 @{ ViewBag.Title = "Welcome"; }
1.OutputCache 简单Demo
[OutputCache(Duration = 60)]
public ActionResult Index()
{
ViewBag.date = DateTime.Now.ToString();
return View();
}
输出页面
@ViewBag.date
效果:
2015/6/10 10:40:08
总结 .带参数的缓存
[OutputCache(Duration = 60, VaryByParam = "id")]
public ActionResult Index2(int id)
{
ViewBag.date = DateTime.Now.ToString();
ViewBag.post = id;
return View();
}
当我们访问
http://localhost:2065 = author;
this.ViewBag.PostName = postname;
return View();
}
public ActionResult RemoveBlogCache
= id;
ViewBag.uid = uid;
return View();
}
/// Home
效果:
原来的URL:http://localhost
获取路由中所有的key foreach (string item in RouteData.Values.Keys) { ViewBag.Keys //获取值 foreach (string item in RouteData.Values.Values) { ViewBag.Values += item + "--->"; } //取ID参数值 ViewBag.id = RouteData.Values["id"]
ActionResult Index() { using (UsersDBEntities db = new UsersDBEntities()) { ViewBag.lists " placeholder="请输入编号" readonly/> <input type="text" name="userName" value="@<em>ViewBag</em>.user.userName " placeholder="请输入用户名"/> <input type="text" name="sex" value="@<em>ViewBag</em>.user.sex" placeholder="请输入用户性别 "/> <input type="text" name="age" value="@<em>ViewBag</em>.user.age" placeholder="请输入用户年龄"/> <input type ="text" name="introduce" value="@<em>ViewBag</em>.user.introduce" placeholder="请输入用户简介"/> <input type="submit
age=2) { ViewBag.userName = userName; ViewBag.age = age; return View(); } 视图层 @Html.ActionLink Index", "Test")
private static Animals _animals; public IActionResult Index() { ViewBag.Animal 修改Test控制器 public IActionResult Index() { ViewBag.Animal = Cry.voice; = _getTransient.GuidItem(); ViewBag.getScoped = _getScoped.GuidItem(); ViewBag.getSingleton
也是 Controller类的一个属性,它的声明如下: public dynamic ViewBag { get; } 可以看到这是一个动态类,实际上ViewBag里的数据与ViewData是互通的,换句话说就是 ViewBag是对ViewData的一次封装,两者并没有实际上的区别。 赋值使用: public IActionResult Index() { ViewBag.Name = "小李"; return View(); } 而ViewDataAttribute ViewBag的访问与ViewData类似,只不过ViewBag是动态对象,可以认为它的类型并没有发生改变,继续按照之前的类型进行使用: