在本节中,您将创建一个新的MoviesController类,并在这个Controller类里编写代码来取得电影数据,并使用视图模板将数据展示在浏览器里。
在开始下一步前,先Build一下应用程序(生成应用程序)(确保应用程序编译没有问题)
用鼠标右键单击Controller文件夹,并创建一个新的 MoviesController控制器。当Build成功后,会出现下面的选项。设定以下选项:
· 控制器名称: MoviesController.(这是默认值)。
· 模板: MVC Controller with read/write actions and views, using Entity Framework.
· 模型类:Movie (MvcMovie.Models).
· 数据上下文类: MovieDBContext (MvcMovie.Models).
· 意见:Razor (CSHTML).(默认值)。
单击添加。Visual Studio Express 会创建以下文件和文件夹:
· 项目控制器文件夹中的MoviesController.cs文件。
· 项目视图文件夹下的 Movie文件夹。
· 在新的Views\Movies文件夹中创建Create.cshtml、 Delete.cshtml、 Details.cshtml、 Edit.cshtml和Index.cshtml 文件。
ASP.NET MVC 4 自动创建 CRUD (创建、 读取、 更新和删除) 操作方法,和相关的视图文件(CRUD 自动创建的操作方法和视图文件被称为基础结构文件)。现在您有了可以创建,列表、 编辑和删电影Entity 所有的Web功能了。
运行应用程序,通过将/Movies追加到浏览器地址栏 URL的后面,从而浏览Movies控制器。因为应用程序依赖于默认路由 ( Global.asax文件中的定义),浏览器请求http://localhost:xxxxx/Movies将被路由到Movies控制器默认的Index 操作方法。换句话说,浏览器请求http://localhost:xxxxx/Movies等同于浏览器请求http://localhost:xxxxx/Movies/Index。因为您还没有添加任何内容,所以结果是一个空的电影列表。
创建电影
点击Create New链接。输入有关电影的一些详细信息,然后单击Create按钮。
单击Create按钮将使得窗体提交至服务器,同时电影信息也会保存到数据库里,然后您会被重定向到URL/Movies,您可以在列表中看到您刚刚创建的新电影。
创建一些更多的电影数据。同时也可以尝试点击编辑、详细信息和删除功能的链接。
看一下生成的代码
打开Controllers\MoviesController.cs文件,并找到生成的Index方法。一本部分电影控制器和Index方法如下所示。
{
private MovieDBContext db = new MovieDBContext();
//
// GET: /Movies/
public ActionResult Index()
{
return View(db.Movies.ToList());
}
下面是MoviesController类中实例化电影数据库上下文实例,如前面所述。电影数据库上下文实例可用于查询、 编辑和删除的电影。
向Movies控制器请求,从而返回Movies电影数据库表中的所有记录,然后将结果传递给Index视图。
强类型模型和 @model 关键字
在本系列之前的教程中,您看到了使用ViewBag对象,从控制器传递数据或对象给视图模板。ViewBag是一个动态的对象,提供了方便的后期绑定方法将信息传递给视图。
ASP.NET MVC 还提供了传递强类型数据或对象到视图模板的能力。这种强类型使得更好的在编译时检查您的代码并在Visual Studio 编辑器中提供更加丰富的智能感知。当创建操作方法和视图时, Visual Studio 中的基础结构机制使用了MoviesController类和视图模板。
在Controllers\MoviesController.cs文件中看一下生成的Details方法。电影控制器里的Details方法如下所示。
{
Movie movie = db.Movies.Find(id);
if (movie == null)
{
return HttpNotFound();
}
return View(movie);
}
如果查找到了一个Movie,Movie 模型的实例会传递给Detail视图。看一下Views\Movies\Details.cshtml文件里的内容。
通过引入视图模板文件顶部的@model语句,您可以指定该视图期望的对象类型。当您创建电影控制器时,Visual Studio 会将@model声明自动包含到Details.cshtml文件的顶部:
@model MvcMovie.Models.Movie
此@model声明使得控制器可以将强类型的Model对象传递给View视图, 从而您可以在视图里访问传递过来的强类型
本文为控件开发系列文章的最后一部分,之前的部分待本人慢慢补上,文中一些方法和经验参考了众多的网上文章,本文也尽可能的列举出来,同时也向这些作者表示感谢。
控件在客户机器上安装使用之后,面临的一个非常重要的问题就是升级。在对控件进行升级时,有四个版本必须注意:
(1) Cab的版本(即html里codebase的版本)
(2) 注册表版本
(3) 安装项目版本(MSI版本)
(4) 控件版本(Activex项目版本)
Cab版本:
Cab版本在网页中的codebase中进行标识,如下面的代码中标识的cab版本是1.0.5,注意版本的分隔符为“,”(逗号),而不是“.”(句号)。
<object id="printer" classid="clsid:9771B223-6188-4849-B292-C7D9D8173E59" codebase=" MyCtrl.CAB#version=1,0,5" width="100%" height="100%">
</object>
注册表版本:
Cab包安装时写到客户机器注册表中的版本标识,一般写在注册表中的下列位置:
HKEY_CLASSES_ROOT /CLSID/{GUID}/InstalledVersion
或
HKEY_CURRENT_USER /Software/Classes/{GUID}/InstalledVersion/(Default)
注册表版本需要在Activex安装项目中进行设置,如果没有设置的话,系统将会默认使用.net framework的版本作为注册表版本。
客户机器打开网页时,将cab包的版本与注册表版本进行比较,如果发现cab包的版本比注册表版本新,将会下载并执行cab程序的安装。
如果安装程序不写注册表或者注册表项中的版本没有变化,而只是修改了网页中的cab版本,则每次打开网页时,客户机器都会执行一次安装。
安装项目版本
这个版本需要比客户机器上的安装版本新,否则在执行安装时会失败,另外需要把移出上一版本这一属性设置为true。
控件版本
这个版本如果比客户机器上的控件版本旧,在执行安装时将不予替换,只有当控件版本比客户机器上版本新的时候新的控件才会替换客户机器上的控件。
要实现C#控件的升级,可按照以下步骤进行:
(1) 设定控件版本
控件项目—右键—属性—应用程序—程序集信息—程序集版本/文件版本
(2) 设定注册表版本
安装项目—右键—视图—注册表—HKEY_CLASSES_ROOT
增加或修改:CLSID/{GUID}/InstalledVersion键,在该键下增加字符串值为版本号,如:
注意:1) GUID两边应该有大括号;2)“默认值”设置为空即可出现,而不是手工输入“默认值”这三个中文字符。
(3) 设定安装项目版本
安装项目—属性(注意通过右键出不来,可以先点击任意一文件--右键--属性—然后切换到安装项目)--version/RemovePreviousVersions(true)。
(4) 设定CAB包版本
<object id="printer" classid="clsid:9771B223-6188-4849-B292-C7D9D8173E59" codebase="MyCtrl.CAB#version=1,0,5" width="100%" height="100%">
</object>
参考文档:
(1) http://blog.csdn.net/luyifeiniu/article/details/6078482
(2) http://social.msdn.microsoft.com/Forums/en-US/ieextensiondevelopment/thread/48335861-2434-4058-9809-186a0bd9e320/
(3) http://stackoverflow.com/questions/1506858/how-to-get-com-server-for-excel-written-in-vb-net-installed-and-registered-in-au
本文链接
RDLC就一个RowNumber的函数能用来做序号,但是往往我们更需要的是分组序号 在RDLC中, 只能用vb 来写。
代码如下:
Dim GroupName As String
Public Function GroupCount(name As String) As Integer
If (GroupName = "") Then
count = 1
GroupName = name
GroupCount = count
Exit Function
End If
If (GroupName = name) Then
count = count + 1
Else
GroupName = name
count = 1
End If
GroupCount = count
End Function
调用 : Code.GroupCount(Fields!GroupName.Value);
本文链接