文章标签 ‘ASP.NET MVC’

[转载]ASP.NET MVC Razor视图引擎攻略 – 菊花台泡茶 – 博客园. 一,创建基于Razor的Web程序   首先你的开发环境必须安装.NET Framework4.0,然后在VS中新建项目时选择ASP.NET MVC 3 应用程序,在选项页面中选择视图引擎为Razor,如图1: 图1   然后创建项目,就会得到一个基于Razor的Web项目了,如图2。  图2 相信熟悉MVC的看官们对此结构并不陌生。注意红框部份,Razor的页面是以cshtml为后缀的,下面我们来讲下如何使用Razor来进行页面布局。   二,使用Razor来进行页面布局 UI设计师们现在也讲究页面设计的语义化和结构化,把一个页面分成很多个模块,使用语义化的类名或id来标识这些模块。Razor推出了新的布局解决方案来迎合这一潮流。 这里涉及到Razor的一些语法,大家可以不深究“@”后面的内容,讲到页面布局,你只要专注与HTML代码就可以了。语法会在后面补充。  1.指定母版与加载机制 首先我们来看_ViewStart.chhtml页面,它的内容很简单: @{ Layout = “~/Views/Shared/_Layout.cshtml”; } 这句代码指定了默认的母版的位置: 当前应用程序根目录下<”~”的含义>的Views/Shared/_Layout.cshtml 除非特殊情况,比如视图是Partial视图,或显示的在视图中添加以下代码指示不使用母版: @{ Layout = null; } 其他情况下,该指定页就是视图的母版页。 然后我们来看看Razor母版页_Layout.cshtml的内容: View Code @ViewBag.Title <script type="text/JavaScript" src="@Url.Content("></script> <div class="page"> <div id="header"> <div id="title"> <h1>我的 MVC 应用程序</h1> &nbsp; [...]

2012年5月8日15:02 没有评论

[转载]如何在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 评论关闭
备案信息:冀ICP备10007948号