私は、以下のコードでわかるように、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私は文字列の値を見て期待しています。
ありがとう、ええ、私はあなたが実装を行うためにjsonConverterを使用すると言ったように見つかりました。 – elhampour