我有一个TestResult类,它继承自ActionResult类,如下面的代码所示。
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);
}
}
我有两个对象,一个是TestClass,另一个是随机字符串,我将它们添加到tempDataService,AddTestObject和AddTestString方法的实现在下面的代码中:
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);
}
}
现在我有一个带有两个动作的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并通过QuickWatch窗口并看到_tempDataDictionary值,那么TestObject1没有任何东西,我只看到TestObject2,重点在于TestObject1我期望要查看类对象,我希望在TestObject2中看到字符串值。
答案 0 :(得分:1)
AFAIK,在当前实现中ITempDataDictionary
仅接受原始值。因此,您可以通过序列化然后将集合List<TestClass>()
反序列化为json来解决此问题。