如何使用Get参数在ASP.NET MVC中传递复杂对象?

4
我想通过GET而不是POST从我的控制器向视图传递以下类似的内容:
public class MyDTO
{
   public string val1 { get; set; }
   public string val2 { get; set; }
   public MyObject obj { get; set; }
}

public class MyObject
{
   public int SomeInt { get; set; }
   public string ACoolValue { get; set; }
   public string YetAnotherCoolValue { get; set; }
}

然后控制器将像这样(注意,它是GET请求):
public ActionResult MyView(MyDTO dto)
{
   return View(dto)
}

问题在于MyObject实例返回为null,而val1和val2具有数据。有人遇到过这种情况吗?
1个回答

4

我刚在Visual Studio 2010中创建了一个全新的ASP.NET MVC 2网站,添加了两个类定义,并修改了HomeController的About操作以使用参数dto。当我访问URL /Home/About?val1=aaa&val2=bbb&obj.SomeInt=111&obj.ACoolValue=ccc&obj.YetAnotherCoolValue=ddd时,所有属性都被填充。

请注意,子对象属性名称需要以父对象的属性名称为前缀(在此示例中为obj)。


嗯,我的情况不是这样的。我正在从先前的ActionResult中执行RedirectToAction("MyView", dto)。在执行此操作之前,我有MyObject实例中的数据,但是当我redirectToAction时,我失去了它。我在MyView中设置了断点并看到null。 - Vishal
重定向之后的URL长什么样子?参数还在吗?它们的名称前缀是否正确? - Daniel Renshaw
URL中不包含obj.SomeInt等内容。它看起来像这样://theurl.com?val1=aaa&val2=bbb&MyObject=ObjectNamespace.MyObject - Vishal
当使用RedirectToAction时,我看到相同的行为。我的猜测是你需要一个自定义的ModelBinder,但我很惊讶默认的模型绑定器在这里不起作用。 - Daniel Renshaw
你能给我推荐一篇好的关于自定义模型绑定器的文章吗?谢谢。 - Vishal

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接