日期:2014-05-17  浏览次数:20705 次

Asp MVC(控制层)

controller层的定义:主要是通过分析URL分发,将M层将数据拿出来,然后返回到VIEW层。

?

自己定义一个controller

1.

使用Icontroller接口

public interface Icontroller

{

???? void Execute(RequestContextrequestcontent);

}

2.实现该接口

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;

namespace NerdDinner.Models
{

//命名规则,NAME+Controller
??? public class MyController : IController
??? {


??????? public void Execute(RequestContext requestContext)
??????? {
??????????? var response = requestContext.HttpContext.Response;
??????????? response.Write("<h1>Hello World</h1>");
??????? }
??? }
}

?

然后在浏览器中输入:http://localhost:2331/My

注意router在解析URL的时候会将你的MyController中的Controller去掉,所以你在实现类的时候要写,在URL的时候不要写。

传入的参数requestContext得到HttpContext可以得到很多对象。

?

类似JAVA中的struts中的Action

但是我们在实际开发中直接继承的是Controller

?public class HomeController : Controller

?

自己实现添加一个路由信息:

如果你的URL想变成:http://localhost:2331/simple/distance/1,2/3,4

首先在Global.asax.cs

加入定义的一个路由信息:

routes.MapRoute(
??????????????? "Simple", // 路由名称
??????????????? "Simple/distance/{x1},{y1}/{x2},{y2}", // 带有参数的 URL
???????????????
???????????????? new { controller = "Simple", action = "Distance", id = UrlParameter.Optional } // 参数默认值
??????????? );

然后写SimpleController

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace NerdDinner.Controllers
{
??? public class SimpleController : Controller
??? {
??????? //
??????? // GET: /Simple/

??????? public void Distance(int x1,int y1,int x2,int y2)
??????? {
??????????? Response.Write(x1+"+"+y1);
??????????? Response.Write(x2 + "+" + y2);
??????? }

??? }
}
然后就可以通过浏览器访问了。

?

?

返回的ActionResult接口:

public abstract class ActionResult

{

??? public abstract void ExecuteResult(ControllerContext context);

}