17

私はかなり長い間T4MVC (FYI:v2.6.62)を使用しており、コードをこの作業方法にゆっくりと移行してきました(マジックストリングへの依存度が低くなっています)。

しかし、何らかの理由でT4MVCがオブジェクトをURLに変換できず、プリミティブ型(int / string / etc)でしか機能しないように見えるため、停止する必要がありました。

次に例を示します。

ルートの内訳:

/MyController/MyAction/{Number}/{SomeText}

クラス:

namespace MyNamespace
{
  public class MyClass
  {
    public int Number { get; set; }
    public string SomeText { get; set; }
  }
}

コントローラ:

public class MyController
{
  public virtual ActionResult MyAction(MyClass myClass)
  {
    return View();
  }
}

意見:

<%= Html.Action(
  T4MVC.MyController.Actions.MyAction(
    new MyClass()
    {
      Number = 1,
      SomeText = "ABC"
    }
 ) %>

最終結果は次のとおりです。

/MyController/MyAction?myClass=MyNamespace.MyClass

ではなく

/MyController/MyAction/1/ABC

他の誰かがこの問題を抱えていますか?このようなT4MVCURLは利用できますか?

ASP.NETフォーラムでも質問があります。

4

2 に答える 2

17

更新(2012年10月11日):最近追加されたモデルアンバインダーのサポート(ドキュメントのセクション3.1を参照)は、これらのケースの多くをカバーするはずです。

元の答え:

フォーラムスレッドから私の返信をコピーします:

うーん、これはまだ出ていないと思います。おそらく、ほとんどの場合、オブジェクトを取得するActionメソッドがありますが、オブジェクトの値は、URLで渡されるのではなく、投稿されたフォームデータから取得されますか?このようなシナリオでは、問題は発生しません。

理論的には、これをサポートするためにT4MVCを変更できると思います。オブジェクト自体を使用しようとするのではなく、すべてのオブジェクトの最上位プロパティをルート値としてプロモートする必要があります(明らかに、現在の動作は偽物であり、ToString()を盲目的に呼び出した結果です)。

他の人がこれに遭遇し、対処する価値があると思いますか?

于 2010-03-04T20:31:57.943 に答える
4

問題を正しく理解している場合は、次の構文で問題を回避できます。

<%= Html.ActionLink("test", MVC.MyController.MyAction().AddRouteValues(new MyClass() { Number = 5, SomeText = "Hello" })) %>

構文をより良くするための答えは、生成された各アクション結果メソッドのRouteValueDictionaryで各非値型パラメーターをラップすることだと思います

編集:(文字が足りないというコメントへの応答)

ああ、私はこのメソッドを使用して上記の簡単な例を再現することができました。/MyController/MyAction/5/HelloURLとして。ネストされた複合型が実際にどのように機能するかはよくわかりません。再帰を使用して最上位のオブジェクトに飛び込み、値を反映して値を追加することもできますが、親と同じ子プロパティ名に対処する方法など、新しい一連の問題が発生します。プロパティ名。これは、すべての人に役立つ方法で解決するのが複雑な問題になる可能性があるようです。おそらく、ある種のアダプタパターンは、複雑なオブジェクトをルート値に変換するのに最も役立つでしょう。最も単純なケースでは、これは、複合型に作用し、それがどのように機能するかについての知識を使用して変換する拡張メソッドToRouteDictionaryを宣言することです。私は明らかにあなたのユースケースを知らないので、大声で考えてください

于 2010-03-08T23:00:29.437 に答える