gpt4 book ai didi

c# - 使用 TempData 在 Controller 操作之间传递细节是不好的做法吗?

转载 作者:行者123 更新时间:2023-11-30 12:34:14 24 4
gpt4 key购买 nike

在某些情况下,我需要在 Controller 操作之间传递一个值。

  1. 当将 returnUrl 从 View 传递到所有嵌套 View 时。在里面查看我有

    @{
    TempData["returnURL"] = Request.Url.AbsoluteUri;
    }

    然后以类似的方式访问它(在我的真实版本中我检查 key 是否在 TempData 中以及 returnURL 是否真实网址):

    return Redirect(TempData["returnURL"].ToString());

    如果它需要在第一页更改之后继续(即搜索page -> Edit page -> Edit Section page)我又来加了

    TempData["returnURL"] = TempData["returnURL"];
  2. 当我需要通过一个 Controller Action 传递一个值时查看由 ajax 调用的另一个 Controller 操作,例如这里:

    public ViewResult Index(FormCollection form)
    {
    var model = new GridColumnChooserViewModel();

    //Select deleted/not deleted rows
    if (form.HasKeys())
    model.ShowRows = (form["deletedDropDown"] == null) ?
    "Active" :
    GetOptionByName(form["deletedDropDown"]);

    TempData["ShowRows"] = model.ShowRows;
    ...
    }

    然后在我的另一个调用 ajax 的 Action Controller 中访问它:

    public JsonResult GetData()
    {
    //Select deleted/not deleted rows
    var showRows = (TempData.ContainsKey("ShowRows") && TempData["ShowRows"] == null) ?
    "Active" :
    GetOptionByName(TempData["ShowRows"].ToString());

    //refresh tempdata showrows so it is there for next call
    TempData["ShowRows"] = model.ShowRows;

    return this.GetDataSource(showRows);
    }

我的问题是,这真的是不好的做法吗?根据我对它的理解,我本质上是在像 session cookie 一样使用 TempData。有没有更好的方法来做到这一点,比如使用实际的 cookie?

最佳答案

是的,我会说这通常是不好的做法。虽然 ViewData 字典方法快速且相当容易实现,但它可能会导致拼写错误和编译时未发现的错误。另一种方法是使用 ViewModel 模式,它允许您为需要在其中公开值或内容的特定 View 使用强类型类。最终为您提供类型安全和编译时检查以及智能感知。

我的第一选择是使用 View 模型。如果这不合适,那么使用 session 状态可能就很好。

关于c# - 使用 TempData 在 Controller 操作之间传递细节是不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7604778/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com