随笔分类 - ASP.NET MVC
摘要:关于控制器工厂的扩展,要么通过实现IControllerFactory接口,要么通过继承DefaultControllerFactory。本篇中,我想体验的是:1、当请求经过路由,controller, action名称是以key/value键值对形式存放的,我们可以通过RequestContext...
阅读全文
摘要:ActionInvoker的作用是:根据请求数据(HttpPost,HttpGet等)和action名称,来激发响应的action,再由action渲染视图。本文通过自定义ActionInvoker,根据请求类型直接渲染视图。控制器中有这样的一个Action: public ActionResult...
阅读全文
摘要:当我们使用jQuery异步提交表单数据的时候,需要把部分视图转换成字符串(带验证信息),以json的形式传递给前端视图。 使用jQuery异步加载部分视图,返回内容追加到页面某个div: jQuery异步提交失败,返回带验证失败信息的部分视图字符串,并追加到页面div: jQuery异步提交成功,返回显示提交成功的部分视图字符串,并追加到页面div: 一...
阅读全文
摘要:使用Mustache的好处是:可以把一些反复用到的html部分定义成Mustache模版,以便多次使用。使用Mustache的大致步骤是: →从后台拿到json数据 →获取前台页面预先定义好Mustache模版(占位符必须和从后台传来的的字段或属性名一致) →遍历每行的json数据,使用Mustache.render(template, row)方法把json数据填充到对应的占...
阅读全文
摘要:通过扩展方法,可以让CheckBox水平排列,生成CheckBoxList,正如"MVC扩展生成CheckBoxList并水平排列"一文。但,如何对生成的CheckBoxList验证呢?比如要求至少勾选一项: □ 思路 在强类型视图页中,@Html.EditorFor(model => model.属性, "模版名称", new{ ...路由数据...}),模版名称对应View...
阅读全文
摘要:需要通过jquery传递到控制器方法的Model为: public class Person { public string Name { get; set; } public int Age { get; set; } }使用下面这个类的Message属性装载成功或错误信息,并最终转换成json格式返回给视图: ...
阅读全文
摘要:Student类有集合属性Courses,如何把Student连同集合属性Courses传递给控制器方法? public class Student { public string StudentName { get; set; } public IList Courses { get; set; } } p...
阅读全文
摘要:在"MVC批量更新,可验证并解决集合元素不连续控制器接收不完全的问题"中,当点击"添加"按钮的时候,通过部分视图,在界面上添加新行。本篇体验使用jQuery Template,在界面上添加新行。 □ 思路 →引用jQuery Template所需要的js文件:jquery.tmpl.min.js →在中生成模版内容,里面包含占位符 →点击添加按钮的时候,把模版内容追加到界面上...
阅读全文
摘要:在"MVC批量添加,增加一条记录的同时添加N条集合属性所对应的个体"中,有2个问题待解决: 1、由jquery动态生成了表单元素,但不能实施验证。 2、一旦集合元素不连续,控制器就无法接收到完整的数据。 批量添加或更新,控制器能接收的方式,大致有2种: Category.Name Category.Products[0].Name Category...
阅读全文
摘要:□ 重写前 通常这样写: @Html.DropDownListFor(m => m.DelFlag,(List □ 重写后 重写name属性: @Html.DropDownListFor(m => m.DelFlag,(List 注意: 如果写成new {id="dd",name="myName"},则不会对name属性重写。 对Html.DropDow...
阅读全文
摘要:从控制器传递多个Model到视图,可以通过ViewData, ViewBag, PartialView, TempData, ViewModel,Tuple等,本篇逐一体验。本篇源码在github。 在视图页面,下拉框选择课程触发事件,分别显示老师课程表、学生上课表,如图: 相关的Model: public class Course { ...
阅读全文
摘要:有时候,我们希望2个属性中,至少有一个是必填,比如: using Car.Test.Portal.Extension; namespace Car.Test.Portal.Models { public class Person { public int Id { get; set; } public string Tele...
阅读全文
摘要:上一篇中,使用客户端jJSAjaxFileUploader插件实现单文件异步上传,本篇实现多文件异步上传。本篇源码在github,先看效果:● 上传文件显示进度条。 ● 停止上传按钮和关闭缩略图按钮。 ● 限制上传文件的类型。 ● 限制上传文件的尺寸。 ●同时上传多个文...
阅读全文
摘要:前段时间做了几个关于图片、文件上传的Demo,使用客户端Query-File-Upload插件和服务端Badkload组件实现多文件异步上传,比如"MVC文件上传04-使用客户端jQuery-File-Upload插件和服务端Backload组件实现多文件异步上传",就Demo而言,效果还算不错,但...
阅读全文
摘要:类别中包含一个产品的集合属性,如何向数据库添加一条类别记录的同时,添加任意多个产品。 public class Product { [DisplayName("产品名称")] public string Name { get; set; } } public class Category { ...
阅读全文
摘要:关于缓存,先前尝试了: ● 在"MVC缓存01,使用控制器缓存或数据层缓存"中,分别在控制器和Data Access Layer实现了缓存 ● 在"MVC缓存02,使用数据层缓存,添加或修改时让缓存失效"中也尝试了在添加或修改时让缓存失效 本篇,要尝试的是视图缓存。 □ 思路 1、缓存的载体是什么? 在Data Access Layer中,缓存是围绕System....
阅读全文
摘要:继上一篇"MVC无限级分类01,分层架构,引入缓存,完成领域模型与视图模型的映射",本篇开始MVC无限级分类的增删改查部分,源码在github。 显示和查询使用datagrid显示数据,向控制器发出请求的时候,datagrid默认带上了当前页page和页容量rows这2个参数。如果项目中的其它界面也...
阅读全文
摘要:本系列将使用zTree来创建、编辑关于品牌、车系、车型的无限级分类,使用datagrid显示,源码在github。先上最终效果:datagrid显示所有记录、分页,提供添加、修改、删除按钮,并提供简单搜索: 创建分类,弹出模态窗口,zTree显示所有分类,点击勾选按钮或节点,所选节点名称显示到文本框...
阅读全文
摘要:本篇将通过3种方式,把枚举项上的自定义属性填充到下拉框: 1、通过控制器返回List如果枚举的项发生变化怎么办?比如: public enum StatusEnum { Enable = 0, Disable = 1, NeverComeback = 2 }如果修改每一页的代码,显然是不合理的。最理想的做法是:为每一个枚举项打上属性,显示的时候直接读取...
阅读全文
摘要:使用"EF Model First",我们可以很直观地在edmx文件中创建数据模型,并根据模型生成数据库,整个过程快速而高效。可当数据库中有了一定的数据量,同时,可能需要对模型中字段、表、关系等进行更新,如何把模型中的变化映射到已经有一定数据量的数据库呢? 本篇使用"EF Model First"创建1对多,多对多关系表,接着体验如何把模型的更新映射到数据库。edmx数据模型在如下几个方面...
阅读全文