【发布时间】:2009-03-24 19:26:59
【问题描述】:
下面的设置方法可行,但不是正确使用 TempData,第一次使用后会掉下来。我怀疑我应该使用 ViewData,但我正在寻找一些指导以正确使用它。
在我的 Home 控制器中,我有一个 Index 操作,显示哪些成员需要创建字母:
Function Index() As ActionResult
Dim members = GetMembersFromSomeLongRunningQuery()
TempData("members") = members
Return View(members)
End Function
在索引视图中,我有一个创建字母的链接:
<%=Html.ActionLink("Create Letters", "CreateLetters", "Home")%>
回到 Home 控制器,我有一个 CreateLetters 函数来处理这个:
Function CreateLetters() As ActionResult
Dim members = TempData("members")
For Each member In members
'[modify member data regarding the letter]
Next
TempData("members") = members
Return RedirectToAction("Letter", "Home")
End Function
最后,有一个创建实际字母的字母视图。它的 ContentType 是“application/msword”,所以数据实际上是在 Word 而不是浏览器中出现的。
就像我说的,这在第一次通过时效果很好。但是,由于字母出现在 Word 中,当用户返回浏览器时,他们仍然坐在带有“创建字母”链接的屏幕上。如果他们再次尝试点击它(即第一次尝试后卡纸),他们会在 CreateLetters 中收到错误,因为 TempData("members") 现在是空的。我知道 TempData 是这样工作的(单次请求),这就是我试图摆脱它的原因。
如何将其重构为使用 ViewData?或者,如何同时显示 Letter 页面(即 Word 文档)并将应用重定向回索引?
【问题讨论】:
标签: asp.net-mvc model-view-controller