我有一个用于创建发票的视图。该过程应如下:
1。用户从下拉列表中指定客户,然后指定开始日期和结束日期。
2. 然后他们点击提交按钮,该按钮链接到控制器。然后,这将构建满足上述标准的所有作业的IList。
3. 页面会刷新并显示作业列表。
4. 在同一页面上,有第二个表单,要求“发票日期”和另一个提交按钮。单击此按钮应该更新我的数据库中的发票表,同时循环执行IList的作业并将发票ID附加到它们(存储在我的数据库中的另一个表中)。
我遇到的问题是我已经构建了一个接受发票数据和IList作业的方法,但是当我尝试在第二个提交控制器方法上传递IList时,它是空的。
在上面的场景中,在第二篇文章中使用第一篇文章构建IList的最佳方法是什么?
我能想到的唯一方法是使用某种临时表来存储第一篇文章后的作业列表,然后在更新发票表时在第二篇中读取。这是实现我想要的可接受的方法吗?或者是否有更好的方法来减少我缺乏经验?的xD
上述方法的错误在于,如果用户在第二次发布之前离开页面,那么临时表将会有一个流氓作业列表,这些作业可能会在下次意外调出。
希望我已经解释得这么好了。提前谢谢。
答案 0 :(得分:0)
您可以使用的临时表(在MVC中构建)是TempData字典。它在会话中持久存在,并且在您使用它们时会删除这些值。
顺便说一句,您是否考虑过使用Ajax而不是发布和引用?这意味着您始终拥有数据,因为您在同一页面上。你不必携带状态。更新:
错误等待,当你说列表为NULL时,你是否在谈论在Action中收到的List作为参数?如果是,this article显示了如何对数据集进行数据绑定。
更新2:
我对使用此方法(从客户端获取数据)有了第二个想法,因为它可能会导致一些安全问题。
如果您不想再次查询数据库,TempData / Session是一种可能的解决方案。
答案 1 :(得分:0)
由于用户未在第二页上修改作业列表,为什么不在处理第二次提交的控制器操作中再次抓取它?