在MVC中,Area使我们的业务逻辑更加清晰,为我们后期的维护带来了极大的便利,那么今天我就来啃啃这一块的东西,可以很方便的替代UrlRouting的一些功能哦~~
Let’s go
.
从上图我们可以看到,新增了Admin和User两个Area,在创建第一个的时候,VS会自动创建一个Areas文件夹。如上图。
我们在User/Controllers上面右键新建一个名为UserController的文件
如下图:
OK,我们可以看到前台和后天都有一个UserController,那么运行会怎么样呢?我们来看看:
Oh,my god.它居然报错了!!!
那么我们应该怎么来处理呢?
第一种:最简单快速的方法修改路由设置
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文件中的路由信息
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下。大家一起进步吧~~
本文链接
抛砖引玉:
{
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的遍历对象是可枚举类型,则她就会执行如下行为:
因为数组是可枚举类型,所以我就使用使用IEnumerator接口来实现枚举数以模仿foreach的循环遍历
实现代码如下:
{
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循环访问该集合
要点:
示意图:
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
前段时间,客户要求增加一个点击率的小功能,现将部分JS代码附上,对以后有所帮助。
1、通过JS读取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文档上
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文件
{
context.Response.ContentType = "text/plain";
string src = context.Request.QueryString["url"];
string path = context.Server.MapPath("openClass.xml"); //