Asp.net mvc ViewData和TempData之间的差异?
我知道什么是ViewData,并且一直在使用它,但是在ASP.NET Preview 5中,他们引入了一种新的称为TempData的东西 我通常会强力键入ViewData,而不是使用对象字典方法 那么,什么时候应该使用TempData而不是ViewData呢Asp.net mvc ViewData和TempData之间的差异?,asp.net-mvc,Asp.net Mvc,我知道什么是ViewData,并且一直在使用它,但是在ASP.NET Preview 5中,他们引入了一种新的称为TempData的东西 我通常会强力键入ViewData,而不是使用对象字典方法 那么,什么时候应该使用TempData而不是ViewData呢 这方面有什么最佳实践吗 在一句话中:TempData类似于ViewData,但有一个区别:它们只包含两个连续请求之间的数据,然后被销毁。您可以使用TempData传递错误消息或类似信息 虽然已经过时,但它对TempData生命周期有很好的描
这方面有什么最佳实践吗 在一句话中:
TempData
类似于ViewData,但有一个区别:它们只包含两个连续请求之间的数据,然后被销毁。您可以使用TempData
传递错误消息或类似信息
虽然已经过时,但它对TempData
生命周期有很好的描述
正如本·谢尔曼所说:
TempData是一个支持会话的临时存储字典,可用于单个请求。在控制器之间传递消息非常好
当操作返回RedirectToAction结果时,它会导致HTTP重定向(相当于Response.redirect)。在单个HTTP重定向请求期间,可以在控制器的TempData属性(字典)中保留数据 我发现这个比较很有用:
我遇到的一个难题是TempData值在默认情况下读取后会被清除。有选项。查看数据:
是字典类型ViewData
publicviewdatadictionary ViewData{get;set;}
- 它只能单向用于将数据从控制器传递到视图
- 它的生命只在当前请求期间存在
- 如果传递字符串,则无需进行类型转换
- 若传递对象,那个么您需要对其进行类型转换,但在此之前,您需要检查它是否为null
- 它是
上的一个属性,它是ControllerBase
类的父级Controller
TempData
内部使用TempDataDictionary
:public TempDataDictionary TempData{get;set;}
TempDataDictionary
对象后:
- 它存在于其中,可以从任何控制器中的任何视图或任何操作中读取
- 只能读一次;一旦读取,它将变为空
- 它被保存到会话中,所以会话数据过期时会丢失
TempData
中的值仅在下一个请求之前可用
当我们想将数据从控制器传递到相应的视图时,使用视图数据。 视图数据的寿命很短,这意味着在发生重定向时它将被破坏。 示例(控制器): try1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@ViewData["Name"]</td>
<td>@ViewData["Twitter"]</td>
<td>@ViewData["City"]</td>
</tr>
</table>
TempView1.cshtm
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@TempData["Name"]</td>
<td>@TempData["Twitter"]</td>
<td>@TempData["Email"]</td>
<td>@TempData["City"]</td>
<td>@TempData["MobNo"]</td>
</tr>
</table>
名称
啁啾
电子邮件
城市
可移动的
@TempData[“名称”]
@TempData[“Twitter”]
@TempData[“电子邮件”]
@TempData[“城市”]
@TempData[“MobNo”]
只是TempData的旁注。在下一次请求之前,不会存储其中的数据,而是在调用下一次读取操作之前
请参阅:
在相同的情况下,ViewData的值会被保留吗?@Ismail:不会,ViewData不会通过重定向来保留数据。这是TempData的主要区别。我认为这是一个相当大的区别,因为
TempData
将涉及比从方法传递到方法的简单字典更复杂的潜在内容(会话)。我想在这里添加一些关于TempData
的内容
public ActionResult try3()
{
TempData["DateTime"] = DateTime.Now;
TempData["Name"] = "Ravina";
TempData["Twitter"] = "@silentRavina";
TempData["Email"] = "Ravina12@gmail.com";
TempData["City"] = "India";
TempData["MobNo"] = 9998975436;
return RedirectToAction("TempView1");
}
public ActionResult TempView1()
{
return View();
}
<table>
<tr>
<th>Name</th>
<th>Twitter</th>
<th>Email</th>
<th>City</th>
<th>Mobile</th>
</tr>
<tr>
<td>@TempData["Name"]</td>
<td>@TempData["Twitter"]</td>
<td>@TempData["Email"]</td>
<td>@TempData["City"]</td>
<td>@TempData["MobNo"]</td>
</tr>
</table>