Edi Wang

Azure Developer, Microsoft MVP

.NET C# Programming Language and .NET Platform


ASP.NET MVC3 TextBox拓展:兼容主流浏览器的PlaceHolder

在MVC的view页面上,我们虽然可以通过给html attribute手写new { @placeholder = "something" }来增加placeholder属性,但这样做对于MVC3框架而言不是非常地道。一个比较好的办法是通过拓展MVC,来增加一个DataAnnotation属性,最终在Model中指定PlaceHolder。下面的方法是我在stackoverflow网站上撸到的,稍作修改并测试后发现非常牛逼,分享给大家。首先,我们要码一个PlaceHolderAttribute类,让它继承Attribute, IMetadataAware两个接口。注意类名是包含Attribute后缀的,但最终使用的时候是只取PlaceHolder这个名字的。(这个机制是.NET自己撸的,我们不用管) public class PlaceHolderAttribute : …

placeholder

ASP.NET MVC3如何用JQuery传递数组(集合)类型参数给JsonResult Action

今天在码新版博客的一个功能,有个细节就是要将一个表格里选中的Id传给后台Action。原先用Form做Post的话,这是非常好实现的,然而现在我要用AJAX完成传递,并且网页上没有Form,所以我也不能用Ajax.BeginForm,肿么办呢?经过一番开荒,我终于把它码出来了。 后台Action是个返回JsonResult的方法,签名如下: public JsonResult ExportSelectedPosts(List<string> selectedIds) 用string集合是因为手写AJAX是不走MVC的model bind的,所以通过网页传递过来的数据只能是string。如果这个方法不加selectedIds这个参数其实也是可以的(最后我们会看到用Request对象一样可以取到值)。但为了符合设计规范,我还是建议大家加上的。 前台的View里这样码(硬编码 …

Array jQuery Json JsonResult MVC

MVC3项目升级到VS2012后无法自动bin deploy的解决办法

前不久我把博客升级到了VS2012的solution,结果bin deploy爆掉了。以前在VS2010里,如果打了SP1补丁的话,对MVC3项目点右键,会多出一个菜单,叫做“Add Deployable Dependencies”, 它会在你的项目文件夹里建一个叫做“_bin_deployableAssemblies”的特殊文件夹,里面放的是MVC3项目的几个dll。在publish的时候会自动拷贝到bin目录里。具体可以参考这篇文章:http://haacked.com/archive/2011/05/25/bin-deploying-asp-net-mvc-3.aspx 然而,在VS2012里,这个选项居然木有了。我查阅了官方的说明,说明中居然写着VS2012会自动进行bin deploy。可是我的博客升级以后就再也没自动过。但是 …

VS2012

Store and Read Images via SQL Server in ASP.NET MVC 3

First of all, I don't recommend storing images in the database, especially in a web project. Because file systems can provide static file access and get many benefits such as performance. Storing images in the database has certain limits. But if you must store images into SQL Server, here's how to do it. SQL Image files are in fact, binary data. SQL Server provides us the image type for …

ASP.NET MVC SQL Server

如何在1分钟内完成一个MVC3 Ajax Grid(增删改查)

以前用ASP.NET WebForms的时候,要让一个Gridview支持AJAX,只要扔到一个Update Pannel里就行了,简单粗暴。然而,在MVC里,关于HTML细节的一切都要我们自己写了,没了Update Pannel这样的无脑控件,怎么快速完成一个AJAX Grid呢? 其实微软已经悄悄的在NuGet上放了一个名为“AjaxGridScaffolder”的包,只要用NuGet下载安装,就可以在你的项目里添加AJAX Grid了。它和别的MVC Scaffolder一样,是一种模板,可以根据你的数据库访问类(要求Entity Framework)以及实体类生成支持CRUD的Grid。效果如下: 具体构建方法如下: 1. 确保你的MVC3项目里添加了EntityFramework,并且根据你需要的数据库生成了edmx。 2. 你的网页上引用了 …

AJAX ASP.NET CRUD Grid

ASP.NET MVC3 Model验证总结

ASP.NET MVC3中的Model是自验证的,这是通过.NET4的System.ComponentModel.DataAnnotations命名空间完成的。我们要做的只是给Model类的各属性加上对应的验证标记(Attributes)就可以让MVC3框架帮我们完成验证。我以MVC3项目模板自带的登录做例子讲解Model的验证。 一、启用客户端验证: 客户端验证主要是为了提高用户体验,在网页不回刷的情况下完成验证。 第一步是要在web.config里启用客户端验证,这在MVC3自带的模板项目中已经有了: <add key="ClientValidationEnabled" value="true"/> <add key="UnobtrusiveJavaScriptEnabled" value="true"/> 然后在被验证的View页面上要加入这样 …

Validation

ASP.NET MVC3调用PartialView的几种方式

我们的网页通常会有好几个部分组成,一些公共的区域我们通常会做成PartialView(部分视图),但这些视图并不是完全固定的,所以还是需要特定的Controller来控制。如果只是静态的html,虽然也可以做成PartialView,但意义不大。下面演示一下MVC3中如何调用PartialView。 首先我们创建一个测试用的Controller: TestController public class TestController : Controller { public ActionResult Message() { var testObj = new List<string>() { "aaa", "bbb", "ccc" }; …

jQuery MVC

ASP.NET MVC3 AJAX调用JsonResult方法并返回自定义错误信息

一、如何用AJAX调用JsonResult方法 比如FuckController中添加有个返回JsonResult类型的方法FuckJson(): public JsonResult FuckJson() { return new JsonResult() { Data = new List<string>() { "fuck", "shit" }, JsonRequestBehavior = JsonRequestBehavior.AllowGet }; } 如果我们直接在浏览器里调用,是可以看到结果的: 因为在浏览器地址栏直接输入这个地址,是一次GET请求,这就是为毛上面的代码里要写JsonRequestBehavior.AllowGet。 用JQuery AJAX调用的代码如下: $.ajax({ …

AJAX Json JsonResult MVC

在SQL Server完整版上部署ASP.NET Membership

平时做练习的时候,用的Membership虽然是SQL方式的,但版本是SQL Express,连接的是网站App_Data文件夹里的mdf文件。如果要把同样的Membership部署到SQL完整版上是会爆的。比如你开发的时候自己用的Express,部署到你的主机服务商时,人家当然用的付费购买的完整版。这样就会爆。网上查了些资料,说Membership是SQL Express独有的功能,我不相信。所以自己开荒了一下,并且成功了。分享给大家。 首先,连接网站App_Data目录的mdf文件,确实只有Express版可以。所以完整版的SQL Server必须在数据库引擎里建立数据库,不要放在网站目录下。 建完数据库以后,打开VS2010的命令行环境,运行aspnet_regsql,你会看到下面这个界面。 选择第一项,即在SQL Server里配置Application …

ASP.NET Membership SQL Server

ASP.NET MVC3和传统WebForm共存时,Chart控件无法显示的解决办法

最近把博客的前台改到了MVC3上去,后台还是WebForm做的。一直有个小bug,今天才刚刚解决。后台页面里有个地方用了ASP.NET 4自带的那个Chart图表控件。原来没用MVC的时候是可以显示的。换了MVC之后,WebForm的代码没有改过,其他都好用,就这个Chart爆了。具体表现为,网页没有报错,就Chart的部分显示不出来。今天检查了一下,并最终解决了这个问题。 首先我在firebug里发现,Chart控件生成的图片是来自一个handler的,但加载失败了: 根据最近玩MVC被坑的经验,可能是URL路由引起的。我去后台日志查看了一下,果然是这样的: 解决办法很简单,在Global.asax里写一条忽略URL路由的规则: routes.IgnoreRoute("Console/Dashboard/ChartImg.axd");   但我很奇怪,MVC3默认已经 …

ASP.NET Chart MVC WebForm