在Asp.net核心项目

时间:2016-04-10 10:24:32

标签: c# asp.net asp.net-core

我有一个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中看到字符串值。

enter image description here

1 个答案:

答案 0 :(得分:1)

AFAIK,在当前实现中ITempDataDictionary仅接受原始值。因此,您可以通过序列化然后将集合List<TestClass>()反序列化为json来解决此问题。