0

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

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

编辑1:

为了自己尝试,这就是我所拥有的:

网络配置

<?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>

我的验证文件非常标准,基本上是从另一个项目复制和粘贴的,因此我没有包含它。

现在我遇到的问题是如何使用它?如何获取应用程序上下文?我的 web 表单项目 users Spring.Web.UI.Page,但我很担心,因为 MVC 中的默认页面派生自System.Web.Mvc.ViewPage,所以这不起作用。

还是我还不能使用 Spring.NET 的 MVC 框架?

谢谢!

感谢您的任何帮助。

4

2 回答 2

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 配置文件的路径是正确的!这是改编自此链接

更广泛地说,这种方法不允许您对页面类进行 Spring,并且作为一种 MVC 架构,其中视图是非常愚蠢的类,并不真正支持以您建议的方式在视图本身中进行丰富的验证。查看在 JQuery 中的模型(回发)中包含验证。

于 2009-06-08T12:36:24.540 回答
0

据我所知,最新版本的 ASP.NET MVC (1.0) 和 Spring.NET 框架 (1.3) 不支持 Spring 验证。

至于将 Spring.NET 与 MVC 结合,您可以使用 MvcContrib 项目并使用 Colin Desmond 发布的相同代码库(但您不必自己做这些脏活)。

于 2009-11-12T17:33:35.190 回答