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:

  1. ViewResult – Represents HTML and markup.
  2. EmptyResult – Represents no result.
  3. RedirectResult – Represents a redirection to a new URL.
  4. RedirectToRouteResult – Represents a redirection to a new controller action.
  5. JsonResult – Represents a JavaScript Object Notation result that can be used in an AJAX application.
  6. 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:

  1. Authorization filters – Implements the IAuthorizationFilter attribute.
  2. Action filters – Implements the IActionFilter attribute.
  3. Result filters – Implements the IResultFilter attribute.
  4. 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 += "&nbsp;&nbsp;";            }            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初学体会.相关推荐

  1. ASP.NET MVC 初学笔记.3 MVC5、EF、RDLC实现报表操作

    在ASP.NET的研究学习中又要用到报表,比如在OA系统里实现凭证.文件等,报表是一个必不可少的东西,但百度了一圈,发现讲得最多的还是水晶报表等第三方报表,好像微软原装的RDLC报表随着MVC的升级渐 ...

  2. ASP.NET MVC Framework 系列

    序言 做为设计模式的王者,MVC在众多领域都成为良好的模型的代名词,从前在ASP.NET下我们只能依靠Monorail来实现ASP.NET下无控件的MVC,但是现在ASP.NET 下的MVC已经成为现 ...

  3. 使用Asp.net MVC, Jquery, Jquery UI构建基于Ajax的RIA应用.(更新Demo下载)

    前天初学Asp.net MVC,发现有些东西用Web Form来做的确会比较方便. 但Asp.net MVC也有它的优点. 它如果跟Jquery和Jquery UI结合起来做基于Ajax的应用实在是太 ...

  4. 《Pro ASP.NET MVC 3 Framework》学习笔记之五【依赖注入及ninject工具使用】

    一,创建松耦合的组件 1."分解关注点"是MVC模式里面一个非常重要的特性.我们想要在应用程序里面创建的组件尽可能的独立,这样我们就能管理比较少的依赖关系.理想情况下,每个组件都是 ...

  5. ASP.NET MVC 3 Framework 学习笔记

    前段时间因项目需要对ASP.NET MVC3进行了系统的学习,完成项目后感觉对原书中有些知识点还有一些理解不够透彻的地方,因此将<Freeman A. Sanderson S. -  Pro A ...

  6. ASP.NET MVC学习系列(一)-WebAPI初探

    由于即将要接手的新项目计划用ASP.NET MVC3来开发,所以最近一段时间一直在看相关的书或文章.因为之前在大学里也曾学习过MVC2开发,也做过几个简单的MVC2的小型测试项目,不过在后来工作以后主 ...

  7. .NET、C#和ASP.NET,ASP.NET MVC 四者之间的区别

    from:http://www.cnblogs.com/wwym/p/5555772.html 经常,会有一些人搞不清楚.NET和c#和ASP.NET这三者之间的关系,她们都是什么呢?他们之间有什么关 ...

  8. [ASP.NET MVC 小牛之路]01 - 理解MVC模式

    特别提醒:本文编写时间是 2013 年,请根据目前 .NET 发展接收你所需的知识点. PS:MVC出来很久了,工作上一直没机会用.出于兴趣,工作之余我将展开对MVC的深入学习,通过博文来记录所学所得 ...

  9. 深入ASP.NET MVC之七:ActionResult的执行(View的加载和渲染)

    书再接回上文Filter和Action的执行 ,当Action方法被执行,返回了一个ActionResult之后,紧接着就要执行ActionResult了,当然还有Filter需要执行,这些都是发生在 ...

  10. 《精通ASP.NET MVC 3框架》译者序

    注:<Pro ASP.NET MVC 3 Framework>一书的翻译工作已经完成,正处于出版社审核阶段,按出版社的预计,此书11月份可以付印.这里贴出译者序,以此作为本书的介绍,也借以 ...

最新文章

  1. Magento开发的特点有哪些?
  2. 正弦信号有效值 c语言,推导正弦波正弦量、平均值、有效值基本公式
  3. 利用反射光电管 ITR9909 制作节能信标光电感应开关
  4. python语言教程-Python语言教程手册
  5. 遇到的一些小的tips
  6. java实例_图例 | Java混合模式分析之火焰图实例
  7. 我的《机器学习》课程的课件合集下载
  8. 2018-2019-2 20175305实验一《Java开发环境的熟悉》实验报告
  9. android 修改 dpi_鼠标DPI是什么意思?鼠标CPI和DPI之间区别知识科普
  10. [Java基础]System类的常用方法
  11. 基于Hibernate+spring的公司网站打造中(二)
  12. 英语学习笔记2019-10-18
  13. Geth搭建以太坊主网公有节点笔记
  14. WebTest of VSTS note 1
  15. 【039】Geometry 总结
  16. 搭建机器人电控系统——PWM原理——舵机和TMOTOR电机
  17. Apache ShenYu源码阅读系列-Divide插件
  18. esp8266保存html文件,八,ESP8266 文件保存数据
  19. 补助方针收紧,意在倒逼新能源汽车?
  20. 三废的日常——什么是负载均衡

热门文章

  1. 2019牛客多校第六场H Pair(数位DP 多个数相关)题解
  2. ZOJ 3430 Detect the Virus(AC自动机 + 模拟)题解
  3. VS code不用集成终端如何修改并推送分支?
  4. vue-resource HTTP API基础
  5. python 【第一篇】初识python
  6. [转载]windows 7 IIS 7.5 ASP.Net 文件上传大小限制
  7. 上次遗留下来的XMLUtil的问题
  8. C#窗体无法接受Keydown事件
  9. Android的系统架构
  10. mktime 夏令时