使用ASP.NET MVC设置Spring.NET验证框架

时间:2009-05-29 17:31:00

标签: asp.net-mvc spring.net

我正在开始一个新的工作项目,我决定要给MVC一个机会。这是一个通勤挑战的小型内部网站。

我想使用Spring.NET进行验证。我以前在Web窗体中使用过Spring.NET,但是在传统ASP.NET中没有代码,我如何使用Spring.NET提供的页面验证框架?

编辑1:

试图自己尝试一下,这就是我所拥有的:

的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框架?

谢谢!

感谢您的帮助。

2 个答案:

答案 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发布的相同的代码库(但您不必自己完成脏工作)。