当前位置:  编程技术>.net/c#/asp.net
本页文章导读:
    ▪VS2010+EF Code First 4.1学习MVC3(二)      在MVC中,Area使我们的业务逻辑更加清晰,为我们后期的维护带来了极大的便利,那么今天我就来啃啃这一块的东西,可以很方便的替代UrlRouting的一些功能哦~~Let’s go.从上图我们可以看到.........
    ▪C#如何实现自定义集合的IEnumerable 和 IEnumerator 接口并使用foreach访问自定义集合         抛砖引玉:                                                                .........
    ▪JS读取XML文件(兼容浏览器)      前段时间,客户要求增加一个点击率的小功能,现将部分JS代码附上,对以后有所帮助。  1、通过JS读取XML文件,主要是判断各个浏览器  // 加载xml文档 var loadXML = function (xmlFile) { .........

[1]VS2010+EF Code First 4.1学习MVC3(二)
    来源:    发布时间: 2013-10-28

在MVC中,Area使我们的业务逻辑更加清晰,为我们后期的维护带来了极大的便利,那么今天我就来啃啃这一块的东西,可以很方便的替代UrlRouting的一些功能哦~~

Let’s go

.

从上图我们可以看到,新增了Admin和User两个Area,在创建第一个的时候,VS会自动创建一个Areas文件夹。如上图。

 

我们在User/Controllers上面右键新建一个名为UserController的文件

如下图:

OK,我们可以看到前台和后天都有一个UserController,那么运行会怎么样呢?我们来看看:

Oh,my god.它居然报错了!!!

那么我们应该怎么来处理呢?

第一种:最简单快速的方法修改路由设置

1 namespace Web.Areas.User
2 {
3 public class UserAreaRegistration : AreaRegistration
4 {
5 public override string AreaName
6 {
7 get
8 {
9 return "User";
10 }
11 }
12
13 public override void RegisterArea(AreaRegistrationContext context)
14 {
15 context.MapRoute(
16 "User_default",
17 "User/{controller}/{action}/{id}",
18 new { controller = "User", action = "UserList", id = UrlParameter.Optional },
19 new string[] { "Web.Areas.User.Controllers" }
20 );
21 }
22 }
23 }

同时修改Global文件中的路由信息

1 routes.MapRoute(
2 "Default", // 路由名称
3 "{controller}/{action}/{id}", // 带有参数的 URL
4 new { controller = "user", action = "UserList", id = UrlParameter.Optional },// 参数默认值
5 new string[] { "Web.Controllers" }//这里是主要注意的地方!!!!
6
7 );

因为我这是前台的web这和区域中的出现重名Controller。所以改Global,如果你在项目开始的时候已经定义好了Area,那么只需要

更改Area中的XXXAreaRegistration.cs文件就OK了。

来看看我们修改以后的效果吧,是否好了呢?

因为我们默认的Action是列表页面,所以直接打开就是这个页面了~~

 

好了,就先到这里,后面我会继续深入研究Area下。大家一起进步吧~~

本文链接


    
[2]C#如何实现自定义集合的IEnumerable 和 IEnumerator 接口并使用foreach访问自定义集合
    来源:    发布时间: 2013-10-28

   抛砖引玉:                                                                                         

static void Main(string[] args)
{
int[] array = new int[] { 5,4,3,2,1};
foreach (int i in array)
Console.WriteLine("Number:"+i);
Console.ReadKey();
}
/**
* -------------执行结果-------------
* Number:5
* Number:4
* Number:3
* Number:2
* Number:1
* -------------执行结果-------------
*/

问题:为什么使用foreach可以遍历出数组中的所有元素呢?                  

原因:数组是可枚举类型,它可以按需提供枚举数,枚举数可以依次返回请求的数组的元素。而foreach结构被设计用来和可枚举类型一起使用,只要给foreach的遍历对象是可枚举类型,则她就会执行如下行为:

  • 通过调用GetEnumerator方法获取对象(如:数组)的枚举数(即数组中的元素值)
  • 从枚举数中请求每一项并把她作为迭代遍历
  • 因为数组是可枚举类型,所以我就使用使用IEnumerator接口来实现枚举数以模仿foreach的循环遍历

    实现代码如下:

    static void Main(string[] args)
    {
    int[] array = new int[] { 5,4,3,2,1};
    IEnumerator ie = array.GetEnumerator();//获取枚举数
    while (ie.MoveNext())//移动下一项
    {
    //最初,枚举数定位在集合中第一个元素前,在此位置上,Current 属性未定义
    //因此,在读取 Current 的值之前,必须调用 MoveNext 方法将枚举数提前到集合的第一个元素
    int i = (int)ie.Current;//获取当前项
    Console.WriteLine("Number:" + i);
    }
    }
    /**
    * -------------执行结果-------------
    * Number:5
    * Number:4
    * Number:3
    * Number:2
    * Number:1
    * -------------执行结果-------------
    */

    实现IEnumerable 和 IEnumerator 接口                                                                    

    以下示例演示如何实现自定义集合的IEnumerable 和 IEnumerator 接口,在此示例中,没有显式调用这些接口的成员,但实现了它们,以便支持使用 foreach循环访问该集合

    要点:

  • 显示实现IEnumerable接口的GetEnumerator成员函数
  • 显示实现IEnumerator接口的Current,Reset(),MoveNext()
  • 示意图:

    using System;
    using System.Collections;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Threading.Tasks;

    namespace ConsoleApplication1
    {
    // 实现IEnumerator接口
    public class PersonIEnumerator : IEnumerator
    {
    string[] Person;
    int position = -1;
    public PersonIEnumerator(string[] thePersons)
    {
    Person = new string[thePersons.Length];
    for (int i = 0; i < thePersons.Length; i++)
    {
    Person[i] = thePersons[i];
    }
    }
    //IEnumerator接口的特性1
    public object Current
    {
    get { return Person[position]; }
    }
    //IEnumerator接口的特性2
    public bool MoveNext()
    {
    if (position < Person.Length - 1)
    {
    position++;
    return true;
    }
    else
    return false;
    }
    //IEnumerator接口的特性3
    public void Reset()
    {
    position = -1;
    }
    }
    //实现IEnumerable接口
    public class MyPersons : IEnumerable
    {
    string[] strArr = new
        
    [3]JS读取XML文件(兼容浏览器)
        来源:    发布时间: 2013-10-28

    前段时间,客户要求增加一个点击率的小功能,现将部分JS代码附上,对以后有所帮助。

      1、通过JS读取XML文件,主要是判断各个浏览器  

    // 加载xml文档
    var loadXML = function (xmlFile) {
    var xmlDoc;
    if (window.ActiveXObject) {
    xmlDoc = new ActiveXObject('Microsoft.XMLDOM');//IE浏览器
    xmlDoc.async = false;
    xmlDoc.load(xmlFile);
    }
    else if (isFirefox=navigator.userAgent.indexOf("Firefox")>0) { //火狐浏览器
    //else if (document.implementation && document.implementation.createDocument) {//这里主要是对谷歌浏览器进行处理
    xmlDoc = document.implementation.createDocument('', '', null);
    xmlDoc.load(xmlFile);
    }
    else{ //谷歌浏览器
    var xmlhttp = new window.XMLHttpRequest();
    xmlhttp.open("GET",xmlFile,false);
    xmlhttp.send(null);
    if(xmlhttp.readyState == 4){
    xmlDoc = xmlhttp.responseXML.documentElement;
    }
    }

    return xmlDoc;
    }

    // 首先对xml对象进行判断
    var checkXMLDocObj = function (xmlFile) {
    var xmlDoc = loadXML(xmlFile);
    if (xmlDoc == null) {
    alert('您的浏览器不支持xml文件读取,于是本页面禁止您的操作,推荐使用IE5.0以上可以解决此问题!');
    window.location.href = '../err.html';

    }
    return xmlDoc;
    }

      2、将读取到的xml文件中的数据显示到html文档上

    <script type="text/javascript" language="javascript">
    var xmlDoc = checkXMLDocObj('../openClass.xml');//读取到xml文件中的数据
    var a = document.getElementsByTagName("a");//获取所有的A标签
    $(document).ready(function () {
    var nodes;
    if($.browser.msie){ // 注意各个浏览器之间的区别
    nodes = xmlDoc.getElementsByTagName('collage')[0].childNodes; //读取XML文件中需要显示的数据
    }
    else if (isFirefox=navigator.userAgent.indexOf("Firefox")>0){
    nodes = xmlDoc.getElementsByTagName('collage')[0].children; //读取XML文件中需要显示的数据
    }
    else{
    nodes = xmlDoc.getElementsByTagName('resource');
    }

    for (var i = 0; i < a.length; i++) {
    if (a[i].parentNode.nodeName == "SPAN") {
    for (var j = 0; j < nodes.length; j++) {
    var resource = nodes[j];
    var url = resource.getAttribute('url');
    var href=/blog_article/$/index.html(a[i]).attr("href");
    if (href == url) {
    var count = resource.getAttribute('click');
    var span = document.createElement("div");
    var str = document.createTextNode("点击率:" + count);
    span.appendChild(str);
    var div = a[i].parentNode.parentNode;
    div.appendChild(span);
    break;
    }
    }
    }
    }
    });
    $(function(){ //通过get请求,将点击率增加
    $(a).mousedown(function(){
    var href = $(this).attr("href");
    $.get("../receive.ashx",{url:href,rd:Math.random()}, function (msg) {

    });
    })
    })
    </script>

      3、通过更新ashx文件在服务器上更新对应的xml文件

    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType = "text/plain";
    string src = context.Request.QueryString["url"];
    string path = context.Server.MapPath("openClass.xml"); //
        
    最新技术文章:
     




    特别声明:169IT网站部分信息来自互联网,如果侵犯您的权利,请及时告知,本站将立即删除!

    ©2012-2021,,E-mail:www_#163.com(请将#改为@)

    浙ICP备11055608号-3