1

私はMVCコントローラーにいます。Guidクラスがあり、MVC でこのクラスの値を aまたは aを扱うのとまったく同じ方法で処理したいと考えていDateTimeます。あれは:

  • クラス タイプのインスタンスがフォームに書き出される場合、それは個別のフィールドとしてではなく、1 つの書式設定された文字列として書き出されます。
  • 値 (文字列形式) がポストバックされると、自動的にクラスのインスタンスに変換されます。

概念的には、これを実装するには、各方向の変換関数のみが必要です。このインターフェースを実装するオブジェクトが 1 つ以上あるとします。

namespace SomeExample
{
    public interface SomeStringConversion<T>
    {
        T ConvertFromString(string str);
        string ConvertToString(T obj);
    }
}

// Example: What such a class for Guid might look like
namespace SomeExample
{
    public class SomeGuidStringConversion : SomeStringConversion<Guid>
    {
        public Guid ConvertFromString(string str)
        {
            return Guid.Parse(str);
        }

        public string ConvertToString(Guid g)
        {
            return g.ToString();
        }
    }
}

そして、 によって受け入れられたり拒否されたりする以上のことを検証することは気にしないとしましょうConvertFromString()

SomeStringConversion<T>のコレクションからそれらを使用するコントローラーへの最も直接的なパス (つまり、モデル バインディングの無関係な機能について無関係な詳細をできるだけ少なくする) は何ですか?

編集: 私はしばらくの間開発者でしたが、MVC に関しては生肉です。逆方向に作業できるコードの例が必要です。大まかな説明はあまり役に立ちません。

4

1 に答える 1

0

これを実装する最も簡単な方法は、カスタム モデル バインダーを使用することです。

バインダーは、バインドするモデル タイプがインターフェイスを実装しているかどうかを確認し、実装しているSomeStringConversion<T>場合は、モデルを着信文字列値にバインドしようとします。そうでない場合はDefaultModelBinder、デフォルトのモデル バインディング コースの実行を単に延期します。

文字列構造が整形式であれば、 を実装しValueProviderて、モデル バインド用のモデル バインダーに値を提供できる場合があります。

于 2013-03-11T19:40:58.210 に答える