怎么往shared文件夹下mvc5分部视图图传一个DataTable进去

0 仓储接口及实现
0.0 仓储接口
修改Fonour.Domain项目中IRepository接口,增加分页查询及根据条件删除的操作接口。
/// &summary&
/// 根据条件删除实体
/// &/summary&
/// &param name="where"&lambda表达式&/param&
/// &param name="autoSave"&是否自动保存&/param&
void Delete(Expression&Func&TEntity, bool&& where, bool autoSave = true);
/// &summary&
/// 分页获取数据
/// &/summary&
/// &param name="startPage"&起始页&/param&
/// &param name="pageSize"&页面条目&/param&
/// &param name="rowCount"&数据总数&/param&
/// &param name="where"&查询条件&/param&
/// &param name="order"&排序&/param&
/// &returns&&/returns&
IQueryable&TEntity& LoadPageList(int startPage, int pageSize, out int rowCount, Expression&Func&TEntity, bool&& where, Expression&Func&TEntity, object&& order);
增加功能菜单管理的仓储操作接口IMenuRepository
public interface IMenuRepository : IRepository&Menu&
0.1 仓储实现
在Fonour.EntityFrameworkCore项目的Repositories\FonourRepositoryBase.cs中实现上述接口。
/// &summary&
/// 根据条件删除实体
/// &/summary&
/// &param name="where"&lambda表达式&/param&
/// &param name="autoSave"&是否自动保存&/param&
public void Delete(Expression&Func&TEntity, bool&& where, bool autoSave = true)
_dbContext.Set&TEntity&().Where(where).ToList().ForEach(it =& _dbContext.Set&TEntity&().Remove(it));
if (autoSave)
/// &summary&
/// 分页查询
/// &/summary&
/// &param name="startPage"&页码&/param&
/// &param name="pageSize"&单页数据数&/param&
/// &param name="rowCount"&行数&/param&
/// &param name="where"&条件&/param&
/// &param name="order"&排序&/param&
/// &returns&&/returns&
public IQueryable&TEntity& LoadPageList(int startPage, int pageSize, out int rowCount, Expression&Func&TEntity, bool&& where = null, Expression&Func&TEntity, object&& order = null)
var result = from p in _dbContext.Set&TEntity&()
if (where != null)
result = result.Where(where);
if (order != null)
result = result.OrderBy(order);
result = result.OrderBy(m =& m.Id);
rowCount = result.Count();
return result.Skip((startPage - <span style="color: #) * pageSize).Take(pageSize);
1 应用服务接口及实现
在Fonour.Application项目中添加MenuApp文件夹,新增IMenuAppService接口及实现MenuAppService,以及数据传输对象MenuDto。
接口主要包含一下定义,具体实现代码参见GitHub源码。
/// &summary&
/// 获取功能列表
/// &/summary&
/// &returns&&/returns&
List&MenuDto& GetAllList();
/// &summary&
/// 根据父级Id获取功能列表
/// &/summary&
/// &param name="parentId"&父级Id&/param&
/// &param name="startPage"&起始页&/param&
/// &param name="pageSize"&页面大小&/param&
/// &param name="rowCount"&数据总数&/param&
/// &returns&&/returns&
List&MenuDto& GetMneusByParent(Guid parentId, int startPage, int pageSize, out int rowCount);
/// &summary&
/// 新增或修改功能
/// &/summary&
/// &param name="dto"&实体&/param&
/// &returns&&/returns&
bool InsertOrUpdate(MenuDto dto);
/// &summary&
/// 根据Id集合批量删除
/// &/summary&
/// &param name="ids"&功能Id集合&/param&
void DeleteBatch(List&Guid& ids);
/// &summary&
/// &/summary&
/// &param name="id"&功能Id&/param&
void Delete(Guid id);
/// &summary&
/// 根据Id获取实体
/// &/summary&
/// &param name="id"&功能Id&/param&
/// &returns&&/returns&
MenuDto Get(Guid id);
1.0 AutoMapper的使用
AutoMapper是一个轻量级的类库,主要功能是把一个对象转换成另外一个对象,而避免我们每次重复的手工去逐个属性赋值转换。在将领域模型(Menu)与数据传输对象(MenuDto)互相转化的过程中提供便利。
0 添加AutoMapper应用
通过NuGet程序包管理器安装、通过NuGet程序包控制台安装、或通过直接修改project.json都可用很方便的快速添加对AutoMapper类库的引用。
1 FonourMapper类
AutoMapper最基本的使用是首先通过CreateMap&T1,T2&()方法创建两个实体的映射关系,然后通过Mapper.Map&T1&(T2)实现实体T2到T1的转换。这里所有领域模型与Dto之间的映射关系创建都在应用服务层完成,应用服务层将接收到的Dto对象转换为领域模型后传入仓储调用,同时将仓储返回的领域模型转换为Dto,返回给界面变现层使用。
在Fonour.Application项目中新增一个名称为FonourMapper的类,里面实现一个名称为Initialize的静态方法,以后所有的领域模型与Dto的映射关系都在这个FonourMapper类里完成。
/// &summary&
/// Enity与Dto映射
/// &/summary&
public class FonourMapper
public static void Initialize()
Mapper.Initialize(cfg =&
cfg.CreateMap&Menu, MenuDto&();
cfg.CreateMap&MenuDto, Menu&();
2 Startup启动时调用
在应用程序启动入口处初始化所有领域模型与Dto对象的映射关系,修改Startup.cs类的Startup方法,增加FonourMapper类Initialize静态方法的调用。
//初始化映射关系
FonourMapper.Initialize();
3 AutoMapper进行实体转换
使用AutoMapper进行实体转换操作主要应用在应用服务接口的实现类中,如MenuAppService的GetAllList方法实现。
public List&MenuDto& GetAllList()
var menus = _menuRepository.GetAllList().OrderBy(it=&it.SerialNumber);
//使用AutoMapper进行实体转换
return Mapper.Map&List&MenuDto&&(menus);
2 表现层实现
在中我们将功能管理部分设计为左右结构,左边为树形结构,右边为列表结构,当单击左边树节点时,加载选中树节点的下级数据至右侧列表中。基于此设计,必不可少的必然包含一个树形插件和一个带有分页功能的表格插件。
2.0 JsTree使用
树形插件这里选择使用JsTree,jsTree是一个 基于jQuery的Tree控件。支持XML,JSON,Html三种数据源。提供创建,重命名,移动,删除,拖"放节点操作。可以自己自定义创建,删 除,嵌套,重命名,选择节点的规则。在这些操作上可以添加多种监听事件,用以实现我们实际应用中的种种树形操作需求。
0 JsTree前端包的安装
通过Bower管理器,搜索JsTree,找到后直接安装即可。或直接修改Fonour.MVC项目中的Bower.json文件:
"name": "asp.net",
"private": true,
"dependencies": {
"bootstrap": "3.3.6",
"font-awesome": "4.6.1",
"iCheck": "1.0.2",
"layer": "*",
"jquery.cookie": "1.4.1",
"jstree": "3.3.0"
1 JsTree的基本使用
在布局页Shared/_Layout.cshtml中统一添加JsTree的css及js引用。
&link rel="stylesheet" href="~/lib/jstree/dist/themes/default/style.min.css"&
&script src="~/lib/jstree/dist/jstree.js"&&/script&
在视图文件中定义要渲染JsTree的Div对象
&div id="treeDiv" class="portlet-body"&
JsTree的创建主要是通过调用$('#treeDiv').jstree()方法实现,下面是一个基本的使用ajax获取json数据并绑定树结构的过程,有关JsTree的更详细的使用说明,请参看官方网站相关介绍。
//加载功能树
function initTree() {
$.jstree.destroy();
type: "Get",
url: "/Menu/GetMenuTreeData",
//获取数据的ajax请求地址
success: function (data) {
$('#treeDiv').jstree({
//创建JsTtree
'data': data,
//绑定JsTree数据
"multiple": false
//是否多选
"plugins": ["state", "types", "wholerow"]
//配置信息
$("#treeDiv").on("ready.jstree", function (e, data) {
//树创建完成事件
data.instance.open_all();
//展开所有节点
$("#treeDiv").on('changed.jstree', function (e, data) {
//选中节点改变事件
var node = data.instance.get_node(data.selected[0]);
//获取选中的节点
if (node) {
selectedMenuId = node.
loadTables(1, 10);
2.1 bootstrap-paginator分页插件使用
表格的显示我们采用Bootstrap中的Table组件,并配合bootstrap-paginator提供的分页功能实现列表数据的分页展示。Bootstrap-paginator是一款基于Bootstrap的js分页插件,功能很丰富,它提供了一系列的参数用来支持用户的定制,提供了公共的方法可随时获得插件状态的改变,以及事件来监听用户的动作。由于它暂不支持Bower,所以我们只能下载这个js文件,添加到我们项目的wwwroot\js\文件夹下。同时在布局页中添加此js的引用。
&script src="~/js/bootstrap-paginator.js"&&/script&
一般的使用是首先在视图页中定义分页插件的容器。
&div class="paging-toolbar"&
&ul id="grid_paging_part"&&/ul&
然后在列表数据的加载同时创建分页插件,其中page,data.rowsCount,data.pageCount等定义需要在请求的控制器方法中通过json格式返回。
var elment = $("#grid_paging_part"); //分页插件的容器id
if (data.rowCount & 0) {
var options = { //分页插件配置项
bootstrapMajorVersion: 3,
currentPage: page, //当前页
numberOfPages: data.rowsCount, //总数
totalPages: data.pageCount, //总页数
onPageChanged: function (event, oldPage, newPage) { //页面切换事件
loadTables(newPage);
elment.bootstrapPaginator(options); //分页插件初始化
2.2 功能实现
新建名称为MenuController的控制器,控制器的构造函数中通过依赖注入获取IMenuAppService的实现实例。
private readonly IMenuAppService _menuAppS
public MenuController(IMenuAppService menuAppService)
_menuAppService = menuAppS
控制器中主要包括以下方法。
Index 返回功能管理界面
GetMenuTreeData 返回左侧功能管理树的Json数据
GetMneusByParent 返回左侧功能树选中节点下级功能分页列表所需Json数据
Edit 功能管理的编辑
DeleteMuti 功能的批量删除
Delete 功能删除
Get 根据id获取功能实体
注:此处根据个人喜好,视图界面采用尽量纯净的html,操作全部采用ajax请求,控制器统一返回Json格式的数据。当然你也可以通过使用TagHelper+模型绑定+Razor机制实现(控制器获取实体或实体集合,返回View,View中得到实体,通过TagHelper实现模型绑定),可参考用户登陆实现部分。
Views文件夹下新建Menu文件夹,在Menu文件夹下创建Index.cshtml视图,以及名称为_Edit.cshtml(新增/修改)的分部视图,同时添加Index.js文件。
在布局页_Layout.cshtml中增加RenderSection,用于渲染视图页中相关js方法。
@RenderSection("scripts", false)
Index.cshtml主要布局修改如下
&div class="row"&
&div class="col-md-3"&
&div class="box box-primary"&
&div class="box-header with-border"&
&h3 class="box-title"&功能管理&/h3&
&div class="box-body"&
&div id="treeDiv" class="portlet-body"&
&div class="col-md-9"&
&div class="box box-primary"&
&div class="box-header with-border"&
&h3 class="box-title"&功能列表&/h3&
&div class="pull-right box-tools"&
&button id="btnAddRoot" class="btn btn-primary" type="button" data-original-title="新增顶级功能" data-toggle="tooltip" data-widget=""&
&i class="fa fa-plus-square"&&/i&&&新增顶级
&button id="btnAdd" title="" class="btn btn-primary" type="button" data-original-title="新增功能" data-toggle="tooltip" data-widget=""&
&i class="fa fa-plus-circle"&&/i&&&新增
&button id="btnDelete" title="" class="btn btn-danger" type="button" data-original-title="删除功能" data-toggle="tooltip" data-widget=""&
&i class="fa fa-times"&&/i&&&删除
&button id="btnLoadRoot" title="" class="btn btn-success" type="button" data-original-title="加载顶级功能" data-toggle="tooltip" data-widget=""&
&i class="fa fa-list"&&/i&&&加载顶级
&div class="box-body"&
&div class="table-scrollable"&
&table class="table table-striped table-bordered table-hover dataTable no-footer" role="grid" aria-describedby="sample_2_info"&
&tr role="row"&
&th class="table-checkbox" style="width:40text-align:"&&input id="checkAll" class="group-checkable" type="checkbox"&&/th&
&th tabindex="0" aria-label=""&
&th tabindex="0" aria-label=""&
&th tabindex="0" aria-label=""&
&th tabindex="0" aria-label=""&
&th tabindex="0" aria-label=""&
&th tabindex="0" style="width: 230" aria-label=""&
&tbody id="tableBody"&&/tbody&
&div class="paging-toolbar"&
&ul id="grid_paging_part"&&/ul&
@Html.Partial("_Edit")
@section scripts{
&script src="~/Views/Menu/Index.js"&&/script&
_Edit.cshtm采用Bootstrap的Modal弹出框组件,做为功能管理的新增和编辑界面
&div id="addRootModal" tabindex="-1" class="modal fade in" aria-hidden="true"&
&div class="modal-dialog"&
&div class="box box-info"&
&div class="box-header with-border"&
&h5 class="box-title" id="Title"&&/h5&
&button class="close" aria-label="Close" type="button" data-dismiss="modal"&
&span aria-hidden="true"&×&/span&
&form class="form-horizontal"&
&input type="hidden" id="Id" /&
&input type="hidden" id="ParentId" /&
&div class="box-body"&
&div class="form-group"&
&label class="col-sm-2 control-label" for=""&功能名称&/label&
&div class="col-sm-10"&
&input class="form-control" id="Name" type="text" placeholder="功能名称"&
&div class="form-group"&
&label class="col-sm-2 control-label" for="inputPassword3"&功能编码&/label&
&div class="col-sm-10"&
&input class="form-control" id="Code" type="text" placeholder="功能编码"&
&div class="form-group"&
&label class="col-sm-2 control-label" for="inputPassword3"&功能类型&/label&
&div class="col-sm-10"&
&select class="form-control" id="Type"&
&option value="0"&功能菜单&/option&
&option value="1"&操作按钮&/option&
&div class="form-group"&
&label class="col-sm-2 control-label" for=""&链接地址&/label&
&div class="col-sm-10"&
&input class="form-control" id="Url" type="text" placeholder="链接地址"&
&div class="form-group"&
&label class="col-sm-2 control-label" for=""&功能图标&/label&
&div class="col-sm-10"&
&input class="form-control" id="Icon" type="text" placeholder="功能图标"&
&div class="form-group"&
&label class="col-sm-2 control-label" for=""&功能序号&/label&
&div class="col-sm-10"&
&input class="form-control" id="SerialNumber" type="text" placeholder="功能序号"&
&div class="form-group"&
&label class="col-sm-2 control-label" for=""&功能描述&/label&
&div class="col-sm-10"&
&textarea id="Remarks" class="form-control" rows="3"&&/textarea&
&div class="box-footer"&
&div class="pull-right box-tools"&
&button id="btnSave" class="btn btn-primary" type="button"&保存&/button&
&button class="btn btn-default" type="button" data-dismiss="modal"&取消&/button&
Index.js文件主要定义视图文件与服务器的交互操作,主要包括以下定义。
前面我们已经介绍过静态文件的使用需要在Startup中的Configure方法中增加
//使用静态文件
app.UseStaticFiles();
这样就可以访问所有wwwroot目录下的静态文件,但是若想访问Views/Menu/Index.js文件,还需要在Configure方法中增加
app.UseStaticFiles(new StaticFileOptions()
FileProvider = new PhysicalFileProvider(Directory.GetCurrentDirectory())
这样在客户端就可以成功访问Views/Menu/Index.js文件,调用相关方法了。
3 界面预览
完成的功能管理界面大体如下。
本次我们通过使用AutoMapper、JsTree、Bootstrap-paginator等技术实现了功能管理的开发,接下来要实现组织机构管理功能的开发。
阅读(...) 评论()关于.net mvc视图调用后台方法的问题
[问题点数:40分,结帖人qq_]
本版专家分:40
结帖率 88.89%
CSDN今日推荐
本版专家分:173887
2015年9月 总版技术专家分月排行榜第一2015年8月 总版技术专家分月排行榜第一2015年7月 总版技术专家分月排行榜第一2015年6月 总版技术专家分月排行榜第一2015年5月 总版技术专家分月排行榜第一2015年4月 总版技术专家分月排行榜第一
2016年1月 总版技术专家分月排行榜第二2015年11月 总版技术专家分月排行榜第二2015年10月 总版技术专家分月排行榜第二
优秀小版主
2016年3月 总版技术专家分月排行榜第三
本版专家分:40
本版专家分:40
本版专家分:1084
本版专家分:282
本版专家分:282
本版专家分:0
本版专家分:229
本版专家分:975
本版专家分:40
本版专家分:45582
2017年11月 .NET技术大版内专家分月排行榜第二2017年10月 .NET技术大版内专家分月排行榜第二
2018年6月 .NET技术大版内专家分月排行榜第三2018年3月 .NET技术大版内专家分月排行榜第三2017年12月 .NET技术大版内专家分月排行榜第三2017年9月 .NET技术大版内专家分月排行榜第三
匿名用户不能发表回复!
其他相关推荐MVC有关的核心命名空间主要有以下几个
System.Web.Routing
URL路由在该命名空间下提供了使用URL路由功能的类,它可以将一个URL路由映射对应到Controller上,而不是映射到一个物理文件。
System.Web.Extensions
这是ASP.NET Ajax的命名空间,在MVC中使用Ajax功能时需要引用。
System.Web.Mvc
这是ASP.NET MVC最主要的命名空间。该命名空间包含一些类和接口,它们支持用于创建Web应用程序的ASP.NET
MVC框架。该命名空间包含表示控制器、控制器工厂、操作结果、视图、分部视图以及模型编译等的类。
System.Web.Abstractions
该命名空间包含一些相关的基类,例如HttpContextBase和HttpRequestBase等。
System.Web.DynamicData
该命名空间包含为 ASP.NET 动态数据提供核心功能的类。另外,它还提供允许自定义动态数据行为的扩展性功能。
创建ASP.NET MVC Web应用程序项目时,MVC组件会按项目文件夹自动分开,如图1-4所示。
MVC应用程序目录结构
默认情况下,MVC应用程序目录结构包括以下文件夹。
包含项目运行所需的命名空间与程序集,在上一节中介绍过。
这是数据的物理存储区。此文件夹的作用与它在使用WebForm页面的ASP.NET网站中的作用相同。
建议在此位置添加内容文件,如级联样式表文件、图像等。通常,Content文件夹用于存储静态文件。
Controllers
建议在此位置存储控制器。MVC
框架要求所有控制器的名称均以Controller结尾,如HomeController、LoginController或ProductController。
这是为表示 MVC
Web应用程序的应用程序模型的类提供的文件夹。此文件夹通常包括定义对象以及定义与数据存储交互所用的逻辑的代码。通常,实际模型对象将位于单独的类库中。但是在创建新应用程序时,可以将类放在此处,然后在开发周期中稍后的某个时刻将其移动到单独的类库中。
建议在此位置存储支持应用程序的脚本文件。默认情况下,此文件夹包含 ASP.NET
Ajax 基础文件和 jQuery 库。
建议在此位置存储视图。视图使用ViewPage(.aspx)、ViewUserControl(.ascx)
和ViewMasterPage(.master)
文件,以及与呈现视图相关的任何其他文件。在Views文件夹中,每个控制器都具有一个文件夹,该文件夹以控制器名称前缀命名。例如,如果控制器名为HomeController,则Views文件夹包含名为Home的子文件夹。
默认情况下,当ASP.NET MVC框架加载视图时,它将在"Views\控制器名称"文件夹中寻找具有请求的视图名称的ViewPage
(.aspx)文件。默认情况下,Views文件夹中也有一个名为Shared的子文件夹,但该文件夹不与任何控制器对应。
Shared文件夹用于存储在多个控制器之间共享的视图。例如,我们可以将Web应用程序的母版页放在Shared文件夹中。
除了使用前面列出的文件夹之外,ASP.NET
Web应用程序还使用Global.asax文件中的代码来设置全局URL路由默认值,并且使用Web.config文件来配置应用程序。
路由在Global.asax文件的Application_Start方法中初始化
默认的路由表中包含一个路由,该默认路由将所有进入的请求拆分为3个单元(URL
单元是正斜杠之间的所有内容)。第一个单元映射到控制器名称,第二个单元映射到操作名称,最后一个单元映射到传递给操作名称 ID
例如,考虑下面的URL:
/Product/Details/3
此URL被解析为如下3个部分:
Controller = ProductController
Action = Details
前缀控制器将被附加到控制器参数的末端,这只是MVC的一个特殊之处。
默认路由包括所有3个单元的默认值。默认控制器是HomeController,默认操作是Index,而默认ID是一个空字符串。观察这些默认值,考虑如何解析下面的
此URL被解析为如下3个参数:
Controller = EmployeeController
Action = Index
最后,如果打开ASP.NET
MVC应用程序而不提供任何URL(例如),那么URL将被解析为:
Controller = HomeController
Action = Index
在构建传统的ASP.NET
WebForm应用程序时,URL和页面是一一对应的。如果从服务器上请求名称为Index.aspx的页面,则硬盘上最好有名称为Index.aspx的页面。如果Index.aspx文件不存在,则将出现404
- Page Not Found错误。
相反,在构建ASP.NET MVC应用程序时,在浏览器地址栏中键入的URL和应用程序中的文件不存在对应关系。在ASP.NET
MVC应用程序中,URL对应的是控制器操作,而不是硬盘上的页面。
还有,在传统的ASP.NET应用程序中,浏览器请求是映射到页面上的。在ASP.NET
MVC应用程序中,浏览器请求是映射到控制器操作。ASP.NET WebForm应用程序关注的是内容,而ASP.NET
MVC应用程序关注的则是应用程序逻辑。
由HomeController类中公开的两个控制器方法Index()和About()都返回一个视图。视图包括发送到浏览器的HTML标记和内容。在使用ASP.NET
MVC应用程序时,视图等于页面。
因此,必须在正确的位置创建视图。HomeController.Index()操作返回位于以下路径的视图:
\Views\Home\Index.aspx
HomeController.About()操作返回位于以下路径的视图:
\Views\Home\About.aspx
总之,如果要为控制器操作返回视图,则需要在Views文件夹中使用与控制器相同的名称创建子文件夹。在子文件夹中,必须创建与控制器操作名称相同的.aspx文件。
视图非常类似于ASP.NET
WebForm的页面,视图包括HTML内容和脚本,可以使用我们熟悉的.NET编程语言(如C#或Visual Basic
.NET)来编写脚本。可以使用脚本显示动态内容,例如数据库中的数据。
MVC模型包含所有视图或控制器不包含的应用程序逻辑。模型应该包含所有应用程序业务逻辑和数据库访问逻辑。例如,如果正在使用
LINQ to SQL 访问数据库,那么将在Models文件夹中创建LINQ to SQL类(dbml文件)。
视图应该只包含与生成用户界面相关的逻辑。控制器应该只包含要求返回正确视图或者将用户重定向到另一操作所需的最小逻辑,其他所有内容都应包含在模型中。总之,应该努力实现高效模型和简化控制器。控制器方法应该只包含几行代码。如果控制器操作过长,则应该考虑将逻辑移动到Models文件夹下的一个新类中。
MVC与WebForm相比,最大的优势就是当应用程序日益复杂时,可以通过分离模型、视图和控制器来进行单元测试。从而使开发者更容易、及时地发现问题。
一般的URL可以由6部分组成,一般格式如下(带方括号的为可选项):
protocol :// hostname[:port] [/path] [?parameters][#fragment]
URL各部分的说明如下。
协议。可以是HTTP(超文本传输协议)、FTP(文件传输协议)和HTTPS(安全的超文本传输协议)等。
主机名。指在互联网中存放资源的服务器DNS主机名或IP地址。
端口号。该选项是一个小于66 536的正整数,是各服务器或协议约定的通信端口。
路径。一般用来表示一个Web站点中的目录或文件资源的地址。
parameters
参数列表。可以给使用动态网页技术(如PHP、ASP、ASP.NET和JSP等)制作的网页传递参数。参数形式为以等号=隔开的键/值对,多个参数之间用And符号&连接。
信息片断。可以直接定位到页面中的某个锚点标记。
自定义URLRouting规则。
首先,先预计我的博客需要有以下几种URL格式。
使用该URL可以在博客中查询系统中某个日期的所有动态信息。例如博客文章、图片等。
Photo/life.private
使用该URL在相册中相询关键字为life,访问权限为private(私有)的照片。
Photo/2010/work
使用该URL查询某年内关于work的信息。
Article/Show/aspnet
使用该URL可以访问文章列表,其中关键字为aspnet。
Home/Index/32
使用该URL访问指定关键字的内容。这里的关键字为整型数值。
了解过了需求,下面着手编写路由代码。为了节省篇幅,这里直接贴出所有配置代码,如下所示:
// Blog.mvc/
routes.MapRoute(
"BlogRoute",
"Blog.mvc/{date}",
new { controller = "Blog", action = "List" },
new { date = @"^\d{4}-\d{2}-\d{2}" });
// Photo/life.private
routes.MapRoute(
"PhotoRoute",
"Photo/{make}.{model}",
new { controller = "Picture", action = "Show" },
new { model = @"(private|public)" });
// Photo/2010/work
routes.MapRoute(
"PhotoRoute2",
"Photo/{*values}",
new { controller = "Photo", action = "Index" },
// Article/Show/aspnet
routes.MapRoute(
"ArticleRoute",
"Article/Show/{key}",
new { controller = "Article", action = "List" },
new { httpMethod = "POST" });
// Article/Show/aspnet
routes.MapRoute(
"ArticleRoute2",
"Article/Show/{key}",
new { controller = "Article", action = "List" },
// Home/Index/32
routes.MapRoute(
"Default",
"{controller}/{action}/{id}",
new { controller = "Home", action = "Index", id = "0" },
new { controller = @"^\w+", action = @"^\w+", id = @"^\d+" });
需要注意的是路由规则中的名称参数不可以重复。
controller中调用自建类找不到命名空间
配置xml时一些jar和命名空间问题,如mvc:annotation-driven
ASP.NET MVC中给所有的cshtml页面引用命名空间
CS0234: 命名空间“System.Web.Mvc”中不存在类型或命名空间名称“Ajax”(是否缺少程序集引用?)
ASP.NET MVC:Razor 引入命名空间
没有更多推荐了,

我要回帖

更多关于 连接局域网共享文件夹 的文章

 

随机推荐