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 は完全にステートレスであるため、アクションに対して要求が行われたときに Model Binder によってデータが取り込まれず、その状態が要求間で保存されません。つまり、ViewData ディクショナリは、リクエストの開始時には常に空です。

アクションのこの行は機能しEditQuestionません。

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

ViewDataは空なので、_filterParamsnull になります。

アクションの場合と同様に、手動でアクションに送信filterParamsする必要があります。EditQuestionGetAllQuestions

filterParamsおそらく、より良い代替手段は、クライアント側で一時 Cookie を使用し続けることです。

于 2012-04-30T18:19:13.340 に答える
0

したがって、この件に関して私が読んだすべての誤った情報に逆らうために、TempData infact はコントローラーでの複数のアクション呼び出しを通じて持続し、必要な機能を実装するために使用することができました。

于 2012-05-01T21:34:18.177 に答える
0

セッションにデータを保存しないのはなぜですか? ここに例を挙げた良い説明があります http://rachelappel.com/when-to-use-viewbag-viewdata-or-tempdata-in-asp.net-mvc-3-applications

于 2012-05-02T22:50:54.430 に答える