在视图之后,将对象传递通过另一个对象会丢失

时间:2014-08-08 15:06:02

标签: c# asp.net-mvc-4 visual-studio-2012

我是MVC4的新手,可能会欣赏一些额外的手握。提前谢谢!

我的项目以强烈输入TicketNumbers的页面开头。在该视图上,用户可以选择任意数量的50个复选框。然后将它们的选择传递给下一个控制器GenerateCombosController。

    public class TicketNumbers
    {
        public string Name { get; set; }
        public List<bool> Numbers { get; set; }

        public TicketNumbers() {
            Numbers = new List<bool>();
            for (int i = 0; i < 50; i++) // default 50 for this example
            {
                Numbers.Add(false);
            }
        }

    }

在GenerateCombosController中,您看到我正在使用ReportCombinations存储刚刚提交的TicketNumbers。然后将ReportCombinations rc传递给强烈键入ReportCombinations的视图。

    public ActionResult Index(TicketNumbers tn)
    {
        ReportCombinations rc = new ReportCombinations();
        rc.Numbers = tn;

        // ... plus some other default attributes for ReportCombinations rc

        return View(rc);
    }

    public ActionResult Submit(ReportCombinations rc)
    {        
        // do stuff here with rc's attributes
        // however rc.Numbers is null! :(

        return View("Index", rc);
    }

如您所见,我希望在用户对ReportCombinations的属性进行一些更改后,将ReportCombinations对象提交回相同的“索引”视图。我当然得到了那些改变的属性但是rc.Numbers返回为null。 &GT;&GT;理想情况下,当用户更改rc的属性时,用户将能够继续提交相同的页面以查看不同的结果。

我已经尝试将视图中的rc.Numbers属性(字符串名称和列表编号)作为隐藏值,但如果这是必需的话,似乎无法正确使用它?使用ViewModel会有所作为吗?我也看过TicketNumbers会被放置在会话中的示例,并在以下方法中重新出现,但在我看来,这几乎不是优雅的。

1 个答案:

答案 0 :(得分:0)

使用jQuery并实现您自己的提交,您可以使用$.ajax() POST到控制器。

var yourObjectData = {  Name: "Name",  Numbers: [1,2,3,4,5]  }

$.ajax({
  url : "Controller/Submit",
  type: "POST",
  data : yourObjectData  ,
  success: function(data, textStatus, jqXHR)
  {
    //data - response from server
  }
 });

显然还有更多的代码要做,但这就是你可以手动构建模型对象的方法