博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
ASP.NET MVC 使用TempData
阅读量:7115 次
发布时间:2019-06-28

本文共 2595 字,大约阅读时间需要 8 分钟。

ASP.NET MVC的TempData用于传输一些临时的数据,例如在各个控制器Action间传递临时的数据或者给View传递一些临时的数据,相信大家都看过“在ASP.NET页面间传值的方法有哪几种”这个面试题,在ASP.NET MVC中TempData的就是其中的一种传值方法。TempData默认是使用Session来存储临时数据的,TempData中存放的数据只一次访问中有效,一次访问完后就会删除了的。这个一次访问指的是一个请求到下一个请求,因为在下一个请求到来之后,会从Session中取出保存在里面的TempData数据并赋值给TempData,然后将数据从Session中删除。我们看一下ASP.NET MVC Preview5源码:

也就是说TempData只保存到下一个请求中,下一个请求完了之后,TempData就会被删除了。注意这里TempData使用Session来做存储的,Session是对应特定用户的,所以并不存在并发问题。如果你用数据库来做TempData的存储介质的话,必须要考虑这个情况的。至于如何自定义TempData的存储介质,你可以参考“”这一篇文章。

前面说到的在我们的BaseController中有一个显示提示信息给用户的方法,这个提示信息就是临时的信息,我们可以使用TempData来实现。下面让我们来实现这个提示信息的方法:

protected
ActionResult ShowMsg(List
<
string
>
msgs)
{
TempData[
"
Messages
"
]
=
msgs;
return
RedirectToAction(
"
Message
"
);
}
public
ActionResult Message()
{
return
View(TempData[
"
Messages
"
]
as
List
<
string
>
);
}

因为我们的Controller都继承自这个我们自定义的BaseController,所以我么可以才Controller中这样来给用户显示提示信息:

TEMPDATA应用例子,通过TEMPDATA实现添加数据时防止页面刷新出现重复提交数据的情况:

STEP01:保存数据到TEMPDATA,定义页面跳转到结果显示页

 public ActionResult Save(Models.GuestBookForm data)

        {

            if (!ModelState.IsValid)

            {
                //验证失败
                return RedirectToAction("Write");
            }

            MvcStudyDemo.Models.MvcGuestbookEntities db = new Models.MvcGuestbookEntities();

            db.AddToMessage(new Models.Message()

            {

                Body = data.MsgName + data.Email,

                AdminReply = data.Content,
                IsSecret = false,
                AdminReplyTime = DateTime.Now,
                CreateTime = DateTime.Now,
                MemberID = 38

            });

            db.SaveChanges();

            //ViewData["Name"] = data.MsgName;

            //ViewData["Email"] = data.Email;
            //ViewData["Content"] = data.Content;

            //return View();

            //保存临时数据,页面跳转防止重复提交
            TempData["LastPostGuestBookForm"] = data;

            return RedirectToAction("Result");

        }

STEP2:新建RESULT动作

 public ActionResult Result()

        {
            if (TempData["LastPostGuestBookForm"] == null)
            {
                return RedirectToAction("Index");
            }

            var model = (Models.GuestBookForm)TempData["LastPostGuestBookForm"];

            return View(model);

        }

STEP3:新建RESULT动作视图

 

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<MvcStudyDemo.Models.GuestBookForm>" %>

<asp:Content ID="Content1" ContentPlaceHolderID="TitleContent" runat="server">

 Result
</asp:Content>

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">

    <h2>Result</h2>

    <fieldset>

        <legend>Fields</legend>
       
        <div class="display-label">MsgName</div>
        <div class="display-field"><%: Model.MsgName %></div>
       
        <div class="display-label">Email</div>
        <div class="display-field"><%: Model.Email %></div>
       
        <div class="display-label">Content</div>
        <div class="display-field"><%: Model.Content %></div>
       
    </fieldset>
    <p>
        <%: Html.ActionLink("Back to List", "Index") %>
    </p>

</asp:Content>

 

 

转载地址:http://igghl.baihongyu.com/

你可能感兴趣的文章
交换变量的值
查看>>
转载-怎样更好地理解并记忆泰勒展开式?
查看>>
C++ 项目改动后eclipse 项目编译 改动无效
查看>>
github学习心得
查看>>
Qt Charts 下的BarChart数据系列标签显示Bug
查看>>
Soap的错误小结
查看>>
GlassFish下手动部署JSF程序
查看>>
IIS报错:Exception from HRESULT: 0x8007000B解决方法
查看>>
隐身扫描服务信息
查看>>
PHP获取新插入的主键id
查看>>
Mac/Linux 常用命令
查看>>
贝叶斯决策
查看>>
Ubutu16.04+Cuda9.2/9.0+Cudnn7.12/7.05+TensorFlow-gpu-1.8/1.6
查看>>
手机应用开发宝典:如何养成一款畅销APP
查看>>
响应式开发: 宽高等比例缩放
查看>>
hdu1272 并查集
查看>>
cf549B Looksery Party 贪心
查看>>
leetcode171 Excel列表序列号
查看>>
文件下载
查看>>
js之数组,对象,类数组对象
查看>>