我必须将使用ASP.NET MVC创建的Web应用程序迁移到基于Visual Studio 2005 ASP.NET Web Forms的常规网站。
我看过像MonoRail这样的东西,但对于我的同事(已经对MVC感到不舒服)使用它的方式却太不相同了。
我读过ASP.NET MVC的第一个版本是在飞机飞行中制作的,这是我愿意处理的那种复杂性。
我不需要ORM。我有一个本土的ORM,我已经使用了很长时间,我将用它来取代实体框架。
具体来说,我主要是在寻找两件事:如何在web.config和一个花哨的Default.aspx中使用一行或两行进行路由,以及如何使用注入模型数据的aspx页面进行渲染。
答案 0 :(得分:1)
您可以在ASP.NET中按照MVC进行路由。
在global.asax中:
protected void Application_Start(object sender, EventArgs e)
{
//do stuff
RegisterRoutes(RouteTable.Routes);
//do stuff
?
public static void RegisterRoutes(RouteCollection routes)
{
routes.RouteExistingFiles = true;
routes.Add(new Route("{controller}/{action}",
new RouteValueDictionary { { "controller", "user" }, { "action", "home" } },
new RouteValueDictionary { { "controller", @"^(?!Resources)\w*$" }, { "action", "[a-zA-Z]+" } },// means that .htm path will go straight to the file, not thru our router
new MvcRouteHandler()));
}
创建自己的路由处理程序
public class CustomRouteHandler : IRouteHandler
{
public IHttpHandler GetHttpHandler(RequestContext requestContext)
{
//do stuff
string controller = RequestContext.RouteData.Values["controller"].ToString();
string methodName = RequestContext.RouteData.Values["action"].ToString();
//do stuff
}
}
public class RoutingHandler : UrlRoutingHandler
{
protected override void VerifyAndProcessRequest(IHttpHandler httpHandler, HttpContextBase httpContext)
{
}
}
对于web.config:
<httpHandlers>
<remove verb="*" path="*.asmx" />
<add verb="*" path="*.asmx" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="*" path="*_AppService.axd" validate="false" type="System.Web.Script.Services.ScriptHandlerFactory, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add verb="GET,HEAD" path="ScriptResource.axd" type="System.Web.Handlers.ScriptResourceHandler, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" validate="false" />
***<add verb="*" path="UrlRouting.axd" validate="false" type="CustomHttpHandlerNamespaceAndClassName, CustomHttpHandlerNamespace" />***
</httpHandlers>
<httpModules>
<add name="UrlRoutingModule" type="System.Web.Routing.UrlRoutingModule, System.Web.Routing, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
<add name="ScriptModule" type="System.Web.Handlers.ScriptModule, System.Web.Extensions, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />
</httpModules>
答案 1 :(得分:0)
有关如何实现路由的指南,请参阅这些文章(尽管在web.config中只使用一行或两行进行此操作可能是一个崇高的目标):
为了注入模型数据 - 在后面的代码中检索所需的模型对象,并使用页面事件(Page_Load等)将数据插入控件,或将其绑定到可绑定控件。
答案 2 :(得分:0)
经过多次Google搜索后,我发现http://mudabone.com/?page_id=335几乎看起来就像我想要的那样,但源代码链接已被破坏。
答案 3 :(得分:0)
我能够从我之前提到的博客文章(A MVC Framework implementation in .Net 2.0 (Spanish))中获取代码并将其打成几乎无法使用的内容。
由于我根本不了解httpHandlers,我使用Intelligencia.UrlRewriter添加了一个hack。最后,我将以下内容添加到我的web.config
中 <httpModules>
<add name="UrlRewriter" type="Intelligencia.UrlRewriter.RewriterHttpModule, Intelligencia.UrlRewriter"/>
</httpModules>
<httpHandlers>
<add verb="*" path="*.mvc" type="MyApp.MainController"/>
<remove verb="*" path="/MyApp/Views/*"/>
<remove verb="*" path="/MyApp/Views/*/*"/>
<remove verb="*" path="/MyApp/Content/*"/>
<remove verb="*" path="/MyApp/Content/*/*"/>
<remove verb="*" path="/MyApp/Scripts/*"/>
<remove verb="*" path="/MyApp/Scripts/*/*"/>
</httpHandlers>
</system.web>
通过这样做,我不得不将aspx附加到url的末尾,如下所示:/MyApp/Home/Index.aspx。我尝试使用.mvc扩展,但这也不起作用。
我发帖时仍有问题。让Alejandro的MainController正确处理多个post变量需要花费大量的工作,我可能不得不做一个FormCollection类。