使用具有字符串属性数组的复杂模型作为参数重定向到Action

Ait*_*iow 3 c# asp.net-mvc asp.net-mvc-3

我遇到了一个问题,我有google却找不到解决方法。

我有这两个动作

    public ActionResult ActionA(DTOA dtoA)
    {
       .....
    }

    [HttpPost]
    public ActionResult ActionB(DTOB dtoB)
    {
        DTOA dto = new DTOA();
        dto.ArraOfStringA = dtoB.ArraOfStringB;
        dto.Id = dtoB.Id;


        return RedirectToAction("ActionA", dto);
    }
Run Code Online (Sandbox Code Playgroud)

模型

public class DTOA
{
    public int Id{get;set;}
    public string[] ArraOfStringA { get; set; }

}

public class DTOB
{
    public int Id{get;set;}
    public string[] ArraOfStringB { get; set; }

}
Run Code Online (Sandbox Code Playgroud)

所以情况是

当我发布到ActionB时,dtoB参数的字符串数组填充有2个itens。“ 1”和“ 2”

但是当此操作重定向到ActionA时,dtoA参数将填充1个itens。“ System.String []”。

如果我在浏览器中输入“ domain / controler / ActionA?ArraOfStringA = 1&ArraOfStringA = 2”

dtoA参数填充了两个iten。“ 1”和“ 2”(预期行为)

那么,如何通过具有数组os字符串属性的复杂模型重定向到ActionA?

tva*_*son 5

TempData如果模型很复杂,则可能需要考虑在两个动作之间进行传输时用于存储模型,而不是使用路由参数。

public ActionResult ActionA()
{
   var dto = TempData["model"] as DTOA;

   ...
}

[HttpPost]
public ActionResult ActionB(DTOB dtoB)
{
    DTOA dto = new DTOA();
    dto.ArraOfStringA = dtoB.ArraOfStringB;
    dto.Id = dtoB.Id;

    TempData["model"] = dto;

    return RedirectToAction("ActionA");
}
Run Code Online (Sandbox Code Playgroud)