Asp.net Mvc Framework 六 (更多的View传值及显示方式)

我们前面都使用RenderView("Index");这种方式来显示
RenderView的重载:
RenderView(string viewName);
RenderView(
string viewName, object viewData);
RenderView(
string viewName, string masterName);
RenderView(
string viewName, string masterName, object viewData);
我们常用的当然就是第一种
第二种RenderView(string viewName, object viewData);是在显示view时附加一个ViewData
如:
RenderView("Index"new
{
    name 
= "重典",
    sex 
= true
}
);
我们就可以在相应的View(即Index.aspx)中调用<%=ViewData["name"]%>来得到它的值

RenderView(string viewName, string masterName);
则是除了Viewname之外还指定了母板页
如果程序写为
RenderView("index""layoutpage");
则是显示index这个View , 但是母板页使用/Views/Shared/layoutpage.master

最后一个重载是前两者的结合,这里不多说了

更多的View传值方式
前面说了向VIew传值可以用ViewData或者是TempData
这里我们介绍ViewData传值的另一种的方式

与Models绑定
这是我们第一次介绍Models,其实Models就是一个数据模型,比如,用户,人,访问记录等
我们建立一个Person类
namespace MvcApplication2.Models
{
    
public class Person
    
{
        
string _name;

        
public string Name {
            
get return _name; }
            
set { _name = value; }
        }

        
bool _sex;

        
public bool Sex {
            
get return _sex; }
            
set { _sex = value; }
        }

    }

}
类中有Name与Sex两个属性
我们仍然用Eice的Index这个Action来书写示例
首先我们实例化一个Person并将之传给View
            Person p = new Person()
            
{
                Name 
= "邹健",
                Sex 
= true
            }
;
            RenderView(
"Index", p);
接下来我们更改View中Eive/Index.aspx.cs
将它的更改如下
    public partial class Index : ViewPage<Person>
    
{
    }
也就是原来Index是继承ViewPage的而现在继承了ViewPage<Person>这个泛型
接下来我们可以在Index.aspx中写类似以下语句了
<%=ViewData.Name %>
<%=ViewData.Sex %>
当然您也可以不写ViewPage<Person>而还像从前一样继承于ViewPage
那么访问方法就是过去的
<%=ViewData["Name"%>
<%=ViewData["Sex"%>

回首望去MS讲的内容与标题反了...Eat去了...每天都为吃发愁...
Asp.net Mvc Framework 系列
posted @ 2008-03-11 18:14 重典 阅读(2721) 评论(11)  编辑 收藏 所属分类: Microsoft MVC

  回复  引用  查看    
#1楼 2008-03-12 10:34 | 巫云      
Sex = true ??
呵呵,怎么不用enum呢,这样感觉好夸张哦。
  回复  引用  查看    
#2楼 [楼主]2008-03-12 11:15 | 重典      
@巫云
只是为了演示一个例子顺手写的而已
如果用enum还要再多给出一段定义,而且前后相关性也会受影响,所以还是用了基础的类型
  回复  引用  查看    
#3楼 2008-07-16 10:32 | 云の世界      
重典兄:
RenderView("Index");
这种情况,rander的
/Views/ControlerName/Index.aspx
但是,如果我想利用view实现换肤的话,
如何做呢。如果这样,似乎很有问题;
string Theme = "blue";
RenderView(Theme + "Index");
那这样在每个/Views/ControlerName/里,都要保含所有版本的view.
通常应该每个主题一个文件夹阿。
view存储路径的规则可否自定义。

  回复  引用  查看    
#4楼 [楼主]2008-07-16 12:03 | 重典      
@云の世界
可以,如果是COntroller不同用不同皮肤可以
/Views/ControlerName/red/index.aspx
/Views/ControlerName/blue/index.aspx各一套
如果想通用则
/Views/shared/blue/index.aspx
/Views/shared/red/index.aspx
就可以在各个控制器间通用了

  回复  引用  查看    
#5楼 2008-07-29 22:09 | 孤独客      
写得非常好
简单明了
:)
  回复  引用  查看    
#6楼 2008-08-30 16:16 | 勇敢的兽      
Preview 4 之后

RenderView() 是不是都改成 View() 了
  回复  引用  查看    
#7楼 [楼主]2008-08-30 16:20 | 重典      
@勇敢的兽
是的
  回复  引用  查看    
#8楼 2008-08-30 16:27 | 勇敢的兽      
大周末都在工作
榜样啊