asp.net MVC初学体会.
asp.net MVC一直想学习的了. 老赵同学的webcast课程也看了几节,但是一直不大想动手做..今天复习并实践了一下下.. 因为实在没有耐心再去看老赵同学的webcast了.所以就直接看http://www.asp.net/learn/mvc/的文章,记下一些关键.就开始做了..
以下是记下的关键东西.
Understanding Action Results
A controller action returns something called an action result. An action result is what a controller action returns in response to a browser request.
The ASP.NET MVC framework supports six standard types of action results:
- ViewResult – Represents HTML and markup.
- EmptyResult – Represents no result.
- RedirectResult – Represents a redirection to a new URL.
- RedirectToRouteResult – Represents a redirection to a new controller action.
- JsonResult – Represents a JavaScript Object Notation result that can be used in an AJAX application.
- ContentResult – Represents a text result.
Understanding Action Filters
Using an Action Filter
[OutputCache(Duration=10)]
he Different Types of Filters
The ASP.NET MVC framework supports four different types of filters:
- Authorization filters – Implements the
IAuthorizationFilter
attribute. - Action filters – Implements the
IActionFilter
attribute. - Result filters – Implements the
IResultFilter
attribute. - Exception filters – Implements the
IExceptionFilter
attribute.
http://www.asp.net/learn/mvc/tutorial-14-cs.aspx
mproving Performance with Output Caching (C#)
http://www.asp.net/learn/mvc/tutorial-15-cs.aspx
Authenticating Users with Forms Authentication (C#)
http://www.asp.net/learn/mvc/tutorial-17-cs.aspx
Adding Dynamic Content to a Cached Page (C#)
http://www.asp.net/learn/mvc/tutorial-19-cs.aspx
然后开始做..
我要实现的是一个树形的控件..大概是这样:
先从数据库读出所有数据到DataTable中,然后解析DataTable到实体类中,最后写一个HtmlHelper,绑定实体类的数据.
DB那边先不弄,现在先弄控件.
先定义存放Tree数据的实体类:
using System;using System.Collections.Generic;using System.Linq;using System.Web;
namespace OtisMVCBlog.Models.ControlsModels{public class OtisTreeNode {public List<OtisTreeNode> Nodes { get; set; }
public int ID { get; set; }public string Title { get; set; }public string Description { get; set; }public string Target { get; set; }public string URL { get; set; }
public bool HaveChild() {if (this.Nodes != null) return true;return false; } }}
然后是编写Tree控件.是用HtmlHelper的来弄, 两个helper,一个是生成<ul><li>格式的HTML,另一个是生成Select.代码如下:
using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Web.Mvc;using OtisMVCBlog.Models.ControlsModels;using System.Text;namespace OtisMVCBlog.Utils.Helpers{public static class TreeHtmlHelpers {
public static string TreeHtml(this HtmlHelper helper, List<OtisTreeNode> treeNodesList,string elementID, string cssClassPrefix) { StringBuilder sbHTML = new StringBuilder(string.Format("<ul id=\"{0}\" class=\"{1}\">",elementID, cssClassPrefix)); int level = 1;foreach (OtisTreeNode tn in treeNodesList) { CreateTree(tn, cssClassPrefix, ref sbHTML, ref level); } sbHTML.Append("</ul>");return sbHTML.ToString(); }public static string TreeSelect(this HtmlHelper helper, List<OtisTreeNode> treeNodesList,string elementID, string cssClass) { StringBuilder sbHTML = new StringBuilder(string.Format("<select id=\"{0}\" class=\"{1}\">\n",elementID, cssClass));int level = 1;foreach (OtisTreeNode tn in treeNodesList) { CreateSelectTree(tn, cssClass, ref sbHTML, ref level); } sbHTML.Append("</select>\n");return sbHTML.ToString(); }private static void CreateSelectTree(OtisTreeNode tn, string cssClassPrefix, ref StringBuilder treeHTML, ref int treeLevel) {
string splitStr = "";for (int i = 1; i < treeLevel; i++) { splitStr += " "; } treeHTML.Append(string.Format("<option value=\"{0}\">{1}{2}</option>\n",tn.ID,splitStr,tn.Title));if (tn.HaveChild()) { StringBuilder sbhtml = treeHTML; int level = treeLevel + 1;foreach (OtisTreeNode tnItem in tn.Nodes) { CreateSelectTree(tnItem, cssClassPrefix, ref sbhtml, ref level); }
}
}private static void CreateTree(OtisTreeNode tn, string cssClassPrefix, ref StringBuilder treeHTML, ref int treeLevel) {if (string.IsNullOrEmpty(tn.URL) && tn.HaveChild()) { tn.URL = string.Format("javascript:{0}ShowTree('ul_{1}');",cssClassPrefix,tn.ID); } treeHTML.Append(string.Format("<li id=\"li_{0}\" class=\"{1}_li_{2}\"> <a target=\"{3}\" href=\"{4}\">{5}</a>", tn.ID, cssClassPrefix, treeLevel, tn.Target, tn.URL,tn.Title));if (tn.HaveChild()) { treeHTML.Append(string.Format("<ul id=\"ul_{0}\" class=\"{1}_ul_{2}\">", tn.ID, cssClassPrefix, treeLevel)); StringBuilder sbhtml = treeHTML; int level = treeLevel + 1;foreach (OtisTreeNode tnItem in tn.Nodes) { CreateTree(tnItem, cssClassPrefix,ref sbhtml,ref level); } treeHTML.Append("</ul>"); } treeHTML.Append("</li>"); } }}
以下Code是View测试的.
<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage" %><%@ Import Namespace="System.Collections.Generic" %><%@ Import Namespace="OtisMVCBlog.Models.ControlsModels" %><%@ Import Namespace="OtisMVCBlog.Utils.Helpers" %><asp:Content ID="Content1" ContentPlaceHolderID="head" runat="server"><title>Index</title></asp:Content>
<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server"><script type="text/C#" runat="server">
List<OtisTreeNode> tns = new List<OtisTreeNode>();protected void Page_Load(object s, EventArgs e) {
for (int i = 0; i < 7; i++) { OtisTreeNode otn = GetNode(new Random().Next(1, int.MaxValue), string.Format("Items {0}", new Random().Next(1, int.MaxValue)), true);if (i % 3 == 0) { otn.Nodes = new List<OtisTreeNode>();for (int j = 0; j < 2; j++) { otn.Nodes.Add(GetNode(new Random().Next(1, int.MaxValue), string.Format("Items {0}", new Random().Next(1, int.MaxValue)), true)); } } tns.Add(otn); }
}private OtisTreeNode GetNode(int id, string title, bool isURL) { OtisTreeNode otn = new OtisTreeNode();
otn.ID = id; otn.Target = "_blank"; otn.Title = title;if(isURL) otn.URL = "http://www.cnblogs.com";return otn; }
</script><h2>Index</h2><table><tr><td><% =Html.TreeHtml(tns,"tree","treeCss") %></td><td valign="top"><% =Html.TreeSelect(tns,"treeSelect","treeSelectCss") %> </td></tr></table></asp:Content>
最后结果如下:
感觉还是蛮方便的..^_^.
但是当我开始要结合数据库弄增删改功能时.习惯了WebForm的思维与WebForm的方便.现在用MVC弄,感觉要麻烦很多了.
如果是用WebForm,这些功能当然是做在一个页面中.而且可以很快得完成..而MVC像是推荐做成到多个页面中.一个是新增,一个是修改.
而且也没有WebForm的事件驱动那么方便和透明,一切数据都要明确的POST到特定的Controller中..这样还真是有点不习惯..
我得找出一个方便的方法.因为这页如果做成多个页面.对用户体验也不是很好..
研究中..
转载于:https://www.cnblogs.com/OtisBlog/archive/2009/02/01/1382198.html
asp.net MVC初学体会.相关推荐
- ASP.NET MVC 初学笔记.3 MVC5、EF、RDLC实现报表操作
在ASP.NET的研究学习中又要用到报表,比如在OA系统里实现凭证.文件等,报表是一个必不可少的东西,但百度了一圈,发现讲得最多的还是水晶报表等第三方报表,好像微软原装的RDLC报表随着MVC的升级渐 ...
- ASP.NET MVC Framework 系列
序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...
- 使用Asp.net MVC, Jquery, Jquery UI构建基于Ajax的RIA应用.(更新Demo下载)
前天初学Asp.net MVC,发现有些东西用Web Form来做的确会比较方便. 但Asp.net MVC也有它的优点. 它如果跟Jquery和Jquery UI结合起来做基于Ajax的应用实在是太 ...
- 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】
一,创建松耦合的组件 1."分解关注点"是MVC模式里面一个非常重要的特性.我们想要在应用程序里面创建的组件尽可能的独立,这样我们就能管理比较少的依赖关系.理想情况下,每个组件都是 ...
- ASP.NET MVC 3 Framework 学习笔记
前段时间因项目需要对ASP.NET MVC3进行了系统的学习,完成项目后感觉对原书中有些知识点还有一些理解不够透彻的地方,因此将<Freeman A. Sanderson S. - Pro A ...
- ASP.NET MVC学习系列(一)-WebAPI初探
由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...
- .NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别
from:http://www.cnblogs.com/wwym/p/5555772.html 经常,会有一些人搞不清楚.NET和c#和ASP.NET这三者之间的关系,她们都是什么呢?他们之间有什么关 ...
- [ASP.NET MVC 小牛之路]01 - 理解MVC模式
特别提醒:本文编写时间是 2013 年,请根据目前 .NET 发展接收你所需的知识点. PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得 ...
- 深入ASP.NET MVC之七:ActionResult的执行(View的加载和渲染)
书再接回上文Filter和Action的执行 ,当Action方法被执行,返回了一个ActionResult之后,紧接着就要执行ActionResult了,当然还有Filter需要执行,这些都是发生在 ...
- 《精通ASP.NET MVC 3框架》译者序
注:<Pro ASP.NET MVC 3 Framework>一书的翻译工作已经完成,正处于出版社审核阶段,按出版社的预计,此书11月份可以付印.这里贴出译者序,以此作为本书的介绍,也借以 ...
最新文章
- Magento开发的特点有哪些?
- 正弦信号有效值 c语言,推导正弦波正弦量、平均值、有效值基本公式
- 利用反射光电管 ITR9909 制作节能信标光电感应开关
- python语言教程-Python语言教程手册
- 遇到的一些小的tips
- java实例_图例 | Java混合模式分析之火焰图实例
- 我的《机器学习》课程的课件合集下载
- 2018-2019-2 20175305实验一《Java开发环境的熟悉》实验报告
- android 修改 dpi_鼠标DPI是什么意思?鼠标CPI和DPI之间区别知识科普
- [Java基础]System类的常用方法
- 基于Hibernate+spring的公司网站打造中(二)
- 英语学习笔记2019-10-18
- Geth搭建以太坊主网公有节点笔记
- WebTest of VSTS note 1
- 【039】Geometry 总结
- 搭建机器人电控系统——PWM原理——舵机和TMOTOR电机
- Apache ShenYu源码阅读系列-Divide插件
- esp8266保存html文件,八,ESP8266 文件保存数据
- 补助方针收紧,意在倒逼新能源汽车?
- 三废的日常——什么是负载均衡