我正在开始一个新的工作项目,我决定要给MVC一个机会。这是一个通勤挑战的小型内部网站。
我想使用Spring.NET进行验证。我以前在Web窗体中使用过Spring.NET,但是在传统ASP.NET中没有代码,我如何使用Spring.NET提供的页面验证框架?
试图自己尝试一下,这就是我所拥有的:
的Web.Config
<?xml version="1.0"?>
<configuration>
<configSections>
<sectionGroup name="spring">
<section name="context" type="Spring.Context.Support.WebContextHandler, Spring.Web" />
<section name="objects" type="Spring.Context.Support.DefaultSectionHandler, Spring.Core"/>
<section name="parsers" type="Spring.Context.Support.NamespaceParsersSectionHandler, Spring.Core"/>
</sectionGroup>
</configSections>
<appSettings>
<add key="RouteValidator" value="RouteValidator"/>
<add key="UserValidator" value="UserValidator"/>
</appSettings>
<spring>
<context>
<resource uri="config://spring/objects"/>
<resource uri="~/Config/Spring.Web.cfg.xml" />
<resource uri="~/Config/Spring.Validation.cfg.xml" />
</context>
<parsers>
<parser type="Spring.Validation.Config.ValidationNamespaceParser, Spring.Core" />
</parsers>
</spring>
<system.web>
<httpModules>
<add name="Spring" type="Spring.Context.Support.WebSupportModule, Spring.Web" />
</httpModules>
</system.web>
</configuration>
Spring.Web.Cfg.xml
<?xml version="1.0" encoding="utf-8" ?>
<objects xmlns="http://www.springframework.net"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.net http://www.springframework.net/xsd/spring-objects.xsd">
<description>
Foo MVC Controller declarations.
</description>
<object id="HomeController" type="Foo.MVC.Web.Controllers.HomeController, Foo.MVC.Web"></object>
<object id="AccountController" type="Foo.MVC.Web.Controllers.RouteController, Foo.MVC.Web"></object>
<object id="RouteController" type="Foo.MVC.Web.Controllers.RouteController, Foo.MVC.Web"></object>
<object id="Spring.Web.UI.Controls.ValidationError" abstract="true">
<property name="Renderer">
<object type="Spring.Web.UI.Validation.IconValidationErrorsRenderer, Spring.Web">
<property name="IconSrc" value="validation-error.gif"/>
</object>
</property>
</object>
<object id="Spring.Web.UI.Controls.ValidationSummary" abstract="true">
<property name="Renderer">
<object type="Spring.Web.UI.Validation.DivValidationErrorsRenderer, Spring.Web">
<property name="CssClass" value="validationError"/>
</object>
</property>
</object>
<object id="standardPage" abstract="true">
<property name="MasterPageFile" value="~/Views/Shared/Site.master"/>
<property name="CssRoot" value="~/Content/"/>
<property name="ImagesRoot" value="~/Content"/>
</object>
</objects>
我的验证文件非常标准,基本上是来自另一个项目的复制和粘贴,因此我没有包含它。
现在我遇到的问题是如何使用它?我如何获得应用程序上下文?我的网络表单项目用户Spring.Web.UI.Page
,但我很担心,因为MVC中的默认页面来自System.Web.Mvc.ViewPage
,因此无法正常工作。
或者我现在还不能使用Spring.NET的MVC框架?
谢谢!
感谢您的帮助。
答案 0 :(得分:0)
你绝对可以将Spring与ASP.Net MVC一起使用。您需要在Global.ascx类中注册您正在使用它,然后框架将根据您在配置文件中定义的内容创建控制器。
public class MvcApplication : System.Web.HttpApplication
{
...Routes stuff...
protected void Application_Start()
{
ControllerBuilder.Current.SetControllerFactory(typeof(ControllerFactory));
RegisterRoutes(RouteTable.Routes);
}
}
public class ControllerFactory : IControllerFactory
{
public IController CreateController(RequestContext requestContext, string controllerName)
{
return IoC.Resolve<IController>(controllerName);
}
public void ReleaseController(IController controller)
{
//This is a sample implementation
//If pooling is used write code to return the object to pool
if (controller is IDisposable)
{
(controller as IDisposable).Dispose();
}
controller = null;
}
}
public static class IoC
{
static readonly IObjectFactory Factory
= new XmlObjectFactory(new FileSystemResource
(HttpContext.Current.Server.MapPath("~/Config/Spring.config")));
public static T Resolve<T>(string name)
{
return (T)Factory.GetObject(name);
}
}
确保spring配置文件的路径正确无误!这是改编自this link。
更广泛地说,这种方法不允许你弹出页面类,并且作为一个MVC架构,其中视图是非常愚蠢的类,并不像你建议的那样真正支持视图本身的丰富验证。在JQuery中查看模型中的验证(post-back)。
答案 1 :(得分:0)
据我所知,最新版本的ASP.NET MVC(1.0)和Spring.NET框架(1.3)不支持Spring Validation。
至于将Spring.NET与MVC结合使用,您可以使用MvcContrib项目并使用与Colin Desmond发布的相同的代码库(但您不必自己完成脏工作)。