0

我真的需要在我的 MVC 应用程序中维护这个名为“filterParams”的字符串。用户输入一些搜索参数后,他单击提交,网格将重新绑定该参数。这很好用。我还将 filterParams 数据保存在 Javascript 变量中,因此当用户页面时,引发 OnDataBinding 事件时,过滤器也通过该 ajax 调用传递。这一切都很好,但是有一个大问题,因为当用户更新问题时,所有结果都会消失,因为它返回到视图并且那里没有任何数据。我使用 ViewData 的方式不起作用,我可以使用你的帮助,因为如果我可以将它存储在 ViewData 中并访问它,它将解决我的问题。如何正确实现 ViewData 以在我的控制器中存储和检索字符串?

以下是一些代码片段。

 [GridAction]
    public ActionResult GetAllQuestion(string filterParams)
    {
        var _filterParams = new List<string>();
        _filterParams.Add(filterParams);
        ViewData["filterParams"] = _filterParams;
            return View(new GridModel(QuestionManager.Instance.GetQuestion(filterParams)));
    }



 [GridAction]
    public ActionResult EditQuestion(int id, QuestionDTO pQuestion)
    {
        //   var _question = QuestionManager.Instance.GetQuestion(id,false).FirstOrDefault();
        // TryUpdateModel(_question);
        var _filterParams = (List<string>)ViewData["filterParams"];
        var filterParams = _filterParams[0]; 
        QuestionManager.Instance.UpdateQuestion(pQuestion);
       // return View(new GridModel(QuestionManager.Instance.GetQuestion(id, false)));
        return View(new GridModel(QuestionManager.Instance.GetQuestion(filterParams)));
    }

在我的 aspx 页面中

Html.Telerik().Grid<QuestionDTO>()
.DataBinding(dataBinding => dataBinding.Ajax().Select("GetAllQuestion", "Question", new { filterParams = string.Empty }).Update("EditQuestion", "Question").Insert("CreateQuestion", "Question"))

请问我怎样才能让它工作?帮助表示赞赏

4

3 回答 3

1

ViewBag/ViewData 仅适用于将数据从操作发送到视图。当对动作发出请求时,模型绑定器不会填充它,并且它的状态不会在请求之间保存,因为 ASP.net MVC 是完全无状态的。换句话说,ViewData 字典在请求开始时总是空的。

这意味着您的EditQuestion操作中的这一行将不起作用:

var _filterParams = (List<string>)ViewData["filterParams"];

ViewData为空,因此_filterParams将为空。

您必须像为操作所做的那样手动发送filterParams到操作。EditQuestionGetAllQuestions

也许更好的选择只是filterParams在客户端使用临时 cookie。

于 2012-04-30T18:19:13.340 回答
0

为什么不将数据存储在 Session 中?这是一个很好的解释示例 http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

于 2012-05-02T22:50:54.430 回答
0

因此,为了反驳我读过的关于该主题的所有错误信息,TempData 实际上确实通过控制器中的多个操作调用持续存在,并且能够用于实现我需要的功能。

于 2012-05-01T21:34:18.177 回答