‘ASP.NET MVC’ 分类的存档

[转载]如何在asp.net mvc3中使用HttpStatusCode – Nic Pei – 博客园. 下载了ASP.NET MVC 4的源码看了看,没怎么看清楚。不过个人觉得MVC4 beta中Web API这个是比较不错的,虽然说它是往传统回归。 web api最好的莫过于它更加适合使用JQuery的ajax调用。   我这里主要给大家说明下如何在ASP.NET MVC 3中借鉴Web API的特性来让AJAX调用更加酷。 首先给大家看个例子,传统的ASP.NET MVC 3中异步调用的Response: Action如下:     相应的JQuery ajax请求代码(只是简单的代码,):   我们来运行看一下Response的信息: Response Header信息:   状态码是200 OK。绿色,  返回的JSON数据:   现在我们想使用http.net定义好的Status来根据不同的操作来返回不同的状态码,比如当创建一条记录成功时,我们返回201成功,当没有权限时,我们返回没有权限。   现在我们试着修改Action如下:   只是添加一行代码: Response.StatusCode,也就是说这个Action是创建人员信息,当信息创建成功时,返回给浏览器说:Hi,创建成功了。以前你可能是 去通过jQuery的ajaxSuccess来去进行后续操作,好吧,现在你可以通过判断客户端获得的状态码来判断是该进行哪步操作了。   试着运行下:   这时你可以看到我们得到的状态码是201,对应的Response Header的信息:   它也不再是200 OK,而是201 Created。   在Asp.net http.net命名空间中,定义了很多Status [...]

2012年5月7日10:06 没有评论

[转载]ASP.NET MVC的Model元数据与Model模板:将”ListControl”引入ASP.NET MVC – Artech – 博客园. 我们不仅可以创建相应的模板来根据Model元数据控制种类型的数据在UI界面上的呈现方法,还可以通过一些扩展来控制Model元数据本身。在某些情况下通过这两者的结合往往可以解决很多特殊数据的呈现问题,我们接下来演示的实例就是典型的例子。[本文已经同步到《How ASP.NET MVC Works?》中] 传 统的ASP.NET具有一组重要的控件类型叫做列表控件(ListControl),它的子类包括DropDownList、ListBox、 RadioButtonList和CheckBoxList等。对于ASP.NET MVC来说,我们可以通过HtmlHelper/HtmlHelper<TModel>的扩展方法DropDownList /DropDownListFor和ListBox/ListBox在界面上呈现一个下拉框和列表框,但是我们需要手工指定包含的所有列表选项。在一般的 Web应用中,尤其是企业应用中,我们会选择将这些列表进行单独地维护,如果我们在构建“列表控件”的时候能够免去手工提供列表的工作,这无疑会为开发带 来极大的遍历,而这实际上很容易实现。[源代码从这里下载] 一、实现的效果 我们先来看看通过该扩展最终实现的效果。在通过Visual Studio的ASP.NET MVC项目模板创建的空Web应用中,我们定义一个作为Model表示员工的Employee类型。如下面的代码片断所示,表示性别、学历、部门和技能的属性分别应用了RadioButtonListAttribute、DropdownListAttribute、ListBoxAttribute和CheckBoxListAttribubte四 个特性。从名称可以看出来,这四个特性分别代表了目标元素呈现在UI界面上的形式,即对应着传统ASP.NET Web应用中的四种类型的列表控件:RadioButtonList、DropdownList、ListBox和CheckBoxList。特性中指定 的字符串表示预定义列表的名称。 1: public class Employee 2: { 3: [DisplayName("姓名")] 4: public string Name { get; set; } 5: 6: [RadioButtonList("Gender")] 7: [DisplayName("性别")] 8: public string Gender { get; set; } 9: [...]

2012年5月4日08:20 评论关闭

[转载]ASP.NET MVC中加载WebForms用户控件(.ascx) – dudu – 博客园. 问题背景 博客园博客中的日历用的是ASP.NET WebForms的日历控件(System.Web.UI.WebControls.Calendar),它会为“上一月”、“下一月”的链接生成”__doPostBack()”的js调用,如下图: 目前发现它会带来两个问题: 1. 不支持IE10; 2. 某些电脑不允许执行__doPostBack。 问题提炼 前提: 我们想以最低的成本解决这个问题,也就是对当前代码尽可能少的改动。所以要尽可能重用现有的日历控件代码。 日历改为Ajax加载,点击“上一月”、“下一月”时Ajax更新日历内容。 用ASP.NET MVC处理Ajax请求。 要解决的问题: 如何在ASP.NET MVC Controller中加载包含WebForms日历控件的用户控件(.ascx),并得到其输出的字符串,然后将__doPostBack的代码替换为ajax调用代码。 核心问题: 如何在ASP.NET MVC Controller中得到用户控件(.ascx)输出的字符串。 解决方法 先看代码 public ActionResult Calendar() { var page = new Page(); var form = new HtmlForm(); var calendar = page.LoadControl("~/Controls/CNBlogsCalendar.ascx"); form.Controls.Add(calendar); page.Controls.Add(form); var sw = new StringWriter(); [...]

2012年5月3日16:24 评论关闭

[转载]ASP.NET MVC的Model元数据与Model模板:模板的获取与执行策略 – Artech – 博客园. 当我们调用HtmlHelper或者HtmlHelper<TModel>的模板方法对整个Model或者Model的某个数据成员以 某种模式(显示模式或者编辑模式)进行呈现的时候,通过预先创建的代表Model元数据的ModelMetadata对象都可以找到相应的模板。如果模板 对应着某个自定义的分部View,那么只需要执行该View即可;对于默认模板,则直接可以得到相应的HTML。本篇文章着重讨论模板的获取和执行机制, 不过在这之前,顺便来讨论一下DataTypeAttribute和模板的关系。[本文已经同步到《How ASP.NET MVC Works?》中] 一、 DataTypeAttribute和模板有何关系? 通过《初识Model元数据》 针对Model元数据定义的介绍,我们知道通过DataTypeAttribute特性对目标元素设置的数据类型最终会反映在表示Model元数据的 ModelMetadata对象的DataTypeName属性上。此外,对于某些设置的数据类型,比如Date、Time、Duration和 Currency等,还会随之创建一个DisplayFormatAttribute应用到ModelMetadata上。那么 ModelMetadata的DataTypeName属性对目标元素的最终呈现具有怎样的影响呢? 实际上在模板匹配的过程中会将ModelMetadata的DataTypeName属性当作模板名称来看待,所以下面两种形式的Model类型定义可以看成是等效的。通过UIHintAttribute特性设置的模板名称和通过DataTypeAttribute特性设置的数据类型的唯一不同之处在于前者具有更高的优先级。换句话说,如果将UIHintAttribute和DataTypeAttribute同时应用到同一个数据成员分别将模板名称和数据类型设置为ABC和123,自定义模板123只有在模板ABC不存在的情况下才会被使用。 1: public class Model 2: { 3: [DataType(DataType.Html)] 4: public string Foo { get; set; } 5: 6: [DataType(DataType.MultilineText)] 7: public string Bar { get; set; } 8: 9: [DataType(DataType.Url)] 10: public string Baz [...]

2012年5月3日08:34 评论关闭

[转载]ASP.NET MVC通过OAuth调用Google API获取用户信息 – dudu – 博客园. 一边享受着乡村的宁静,一边写着博客,也是一种惬意。 喜欢解决问题后写一篇博客。通过文字表达出来,会加深自己的理解,还经常会有新的收获,甚至会找到更好的解决方法。同时,还能分享给别人。一举多得,何乐而不为呢? 这次要解决的问题是如何在用户注册时验证用户的邮箱? 通常的解决方法是给用户的邮箱发一封激活邮件。但这个方法有以下几个问题: 从发出邮件至收到邮件,可能会有延时。 邮件可能会被当作垃圾邮件处理 用户可能会填错了邮箱,更糟糕的情况是用户不知道自己填错了邮箱。 这次要解决的问题的更具体的场景是如何验证用户的gmail邮箱? 我们采用的解决方法是通过OAuth调用Google API获取用户的gmail地址。 于是,问题就变为如何在ASP.NET MVC中通过OAuth调用Google API? 必看的两个文档: Using OAuth 2.0 to Access Google APIs Using OAuth 2.0 for Web Server Applications 我们的OAuth应用场景是Web Server Applications,对应的序列图如下: 简单描述一下整个流程: 你在网站上提供一个Google OAuth登录的链接 用户点击这个链接进入Google登录页面进行登录 用户登录成功后,会显示授权页面。 用户授权成功后,Google会自动重定向至你的网站页面,并传递authorization code给你。 通过这个authorization code,向Google OAuth服务器请求access_token。 拿到access_token之后,调用Google API获取用户信息。 下面是具体的实现步骤: 1. 进入Google APIs Console,创建一个Project,并创建Client [...]

2012年5月2日17:23 评论关闭
备案信息:冀ICP备10007948号