【问题标题】:How can ViewBag data be saved after a form post?表单发布后如何保存 ViewBag 数据?
【发布时间】:2012-06-12 13:26:35
【问题描述】:

所以我有一个ViewBag.Something,这个数据是随机生成的。在我看来,我将其设置为像@Html.LabelFor(m => m.Something, (string)ViewBag.Something) 这样的标签。这很好,但是当我提交表单时可能会出现错误,如果有错误,我需要这个标签保持不变,我不再想要动态/随机数据,所以我不会调用生成的控制器方法这个 ViewBag。有没有办法在我的控制器中没有一些私有变量的情况下保留这个值? MVC/Razor 的一些不错的方法?

【问题讨论】:

    标签: asp.net-mvc asp.net-mvc-3 razor viewbag


    【解决方案1】:

    选项 1:

    使用路由值将“ViewBag.Something”的值传递给控制器​​:

    @Html.ActionLink("ButtonText", "ActionName", new { Something = @ViewBag.Something })
    

    选项 2: 您可以使用 TempData

    public ActionResult Index()
    {
     var Something = "YOURVALUE";
     TempData["Something"] = Something;
    .......
    }
    
    
    public ActionResult OtherAction()
    {
        var Something = TempData["Something "];
        ...........
    }
    

    动作方法之间的传递状态

    动作方法可能必须将数据传递给另一个动作,例如,如果在发布表单时发生错误,或者该方法必须重定向到其他方法,这可能会在用户被定向到登录视图和然后回到原来的动作方法。

    动作方法可以在调用控制器的 RedirectToAction 方法调用下一个动作之前将数据存储在控制器的 TempDataDictionary 对象中。 TempData 属性值存储在会话状态中。在设置 TempDataDictionary 值之后调用的任何操作方法都可以从对象中获取值,然后处理或显示它们。 TempData 的值会一直存在,直到它被读取或会话超时。以这种方式持久化 TempData 可以实现重定向等场景,因为 TempData 中的值在单个请求之外可用。

    【讨论】:

    • 所以当我点击提交时我会将 ViewBag.Something 存储在临时数据中,如果出现问题,它可以使用吗?这可能会产生问题,因为我的标签是从 ViewBag 中填充的,我想现在我需要一些 if?
    • 感谢您的帮助,看起来确实不错,但我走的方向不同,所以我无法接受您的回答
    • @Pittfall 我有同样的问题你能分享你的解决方案吗?谢谢。
    【解决方案2】:

    在get中,设置一个模型,动态设置它,当return view()被执行时,做return view(model)。然后在视图中,设置一个隐藏字段,可以继续传递所需的值。我选择这条路线是因为我不必担心任何服务器代码来使这项工作在帖子上运行,而且我不必担心任何会话。

    【讨论】:

    • 这有一个安全问题。如果有人检查代码,他们将能够获取甚至修改数据......如果它是一个对象怎么办?
    【解决方案3】:

    发布后在视图包中显示消息(我使用此方法)

    ActionResult SubmitUser(){
    
      ViewBag.Msg =TempData["Msg"];
    
      return view();
    }
    
    
    [HtttpPost]
    ActionResult SubmitUser(){
    
     TempData["Msg"] ="Submitted Successfully"];
    
      return view();
    }
    

    值是发送到获取方法..

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2022-01-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多