2016-04-10 22 views
1

私は、以下のコードでわかるように、ActionResultクラスから継承されたTestResultクラスを持っています。私は今Asp.netコアプロジェクトでITempDataDictionayクラスを使用

public static class TestExtensions 
{ 
    const string TestObject1 = "_Test1"; 
    const string TestObject2 = "_Test2"; 

    public static void AddTestObject(this ITempDataDictionary tempData, TestClass testClass) 
    { 
     if (!tempData.ContainsKey(TestObject1)) 
     { 
      tempData[TestObject1] = new List<TestClass>(); 
     } 
     ((List<TestClass>)tempData[TestObject1]).Add(testClass); 
    } 

    public static void AddTestString(this ITempDataDictionary tempData,string testString) 
    { 
     tempData[TestObject2] = testString; 
    } 

    public static ActionResult WithTestMessages(this ActionResult result) 
    { 
     return new TestResult(result); 
    } 
} 

public class TestResult : ActionResult 
{ 
    public ActionResult InnerResult { get; set; } 

    public TestResult(ActionResult innerResult) 
    { 
     InnerResult = innerResult; 
    } 

    public override void ExecuteResult(ActionContext context) 
    { 
     var tempDataService = context.HttpContext.RequestServices.GetRequiredService<ITempDataDictionary>(); 
     tempDataService.AddTestObject(new TestClass("TestValue1", "TestValue1")); 
     tempDataService.AddTestString("TestString1"); 
     InnerResult.ExecuteResult(context); 
    } 
} 

私は1つが別のものがランダムな文字列であるTestClassをある2つのオブジェクトを持って、私はtempDataService、AddTestObjectとAddTestStringメソッドの実装に追加するには、以下のコードでありますあなたは以下を参照することができますように2回の操作でTestControllerを持っている:

public class TestController : Controller 
{ 
    private readonly ITempDataDictionary _tempDataDictionary; 

    public TestController(ITempDataDictionary tempDataDictionary) 
    { 
     _tempDataDictionary = tempDataDictionary; 
    } 

    public IActionResult TestAction() 
    { 
     return RedirectToAction(nameof(TestAction2)).WithTestMessages(); 
    } 

    public IActionResult TestAction2() 
    { 
     return Content("TestAction2"); 
    } 
} 

ここで奇妙なことは、私はコントローラにITempDataDictionaryを注入して行けばということですクイックウォッチウィンドウと_TempDataDictionaryの値を参照してTestObject1のためのものは何もないと私はちょうどTestObject2を参照して、ポイントはTestObject1私はクラスオブジェクトを参照してください期待してTestObject2私は文字列の値を見て期待しています。

enter image description here

答えて

1

私の知る限りでは、現在の実装ではITempDataDictionaryのみプリミティブ値を受け入れます。したがって、あなたのコレクションList<TestClass>()をjsonにシリアル化してデシリアライズすることで回避できます。

+0

ありがとう、ええ、私はあなたが実装を行うためにjsonConverterを使用すると言ったように見つかりました。 – elhampour

関連する問題