2

ハロー、

WebサイトをASP.NETMVC1からASP.NETMVC3に、およびVS2008からVS2010に更新しようとしています。これまでのところ、FormCollectionクラスが2つのビジュアルスタジオ間で完全に異なっているように見えることを除いて、すべてが順調に進んでいるようです。

VS2008にはバージョン1とバージョン2(おそらくMVC1とMVC2)のFormCollectionがあり、大きな変更は見られませんが、VS2010では唯一のFormCollectionクラスに封印されたクラスがあります。 FormCollectionから継承する以前のクラスがあるので、私は悲しみを覚えます。

私が知っていて大好きだったFormCollectionが移動したのか、それともそれを継承するクラス(多くのもの)を使用してすべてを書き直す必要があるのか​​、誰か知っていますか?

よろしく、ハリー

4

1 に答える 1

1

今それを回避するために私の方法を働いた。FormCollection今では継承する代わりに、独自のフィールド' form'があります。これはFormCollection代わりに、コマンドはそれに基づいて動作します。

編集:

人々はコードを求めていたので、ここに古いクラスがあります:

using System;
using System.Linq.Expressions;
using System.Web.Mvc;
using OpenProjects.Core;

namespace ProjectSupport.Web.Test
{
    public class FormFor<TEntity> : FormCollection where TEntity : class
    {
        public FormFor<TEntity> Set<TReturn>(Expression<Func<TEntity, TReturn>> property, string value)
        {
            this[property.PropertyName()] = value;

            return this;
        }
    }
}

そして、これが今の状況です。

using System;
using System.Linq.Expressions;
using System.Web.Mvc;
using OpenProjects.Core;

namespace ProjectSupport.Web.Test
{
    public class FormFor<TEntity> where TEntity : class
    {
        private FormCollection form;


        public FormFor()
        {
            form = new FormCollection();
        }

        public FormFor<TEntity> Set<TResult>(Expression<Func<TEntity, TResult>> property, string value)
        {
            form.Add(property.PropertyName(), value);

            return this;
        }

        public FormCollection ToForm()
        {
            return form;
        }
    }
}

モデルバインダーではなくこれが使用された理由を明確にするために、これはフォームをすばやく簡単にモックアップするためのテストにのみ使用されていました。

于 2011-03-02T13:35:54.160 に答える