0

Мне действительно нужно сохранить эту строку под названием «filterParams» в моем приложении MVC. После того, как пользователь вводит некоторые параметры поиска, он нажимает кнопку submit, и сетка перестраивается с этим параметром. Это отлично работает. Я также сохраняю данные filterParams в переменной Javascript, поэтому, когда страницы пользователя и событие OnDataBinding повышаются, фильтр также проходит через этот вызов ajax. все это хорошо и хорошо, но есть огромная проблема, потому что когда пользователь обновляет вопрос, все результаты исчезают, потому что он возвращается в представление и там нет никаких данных. То, как я использую ViewData, не работает, и я мог бы использовать вашу помощь, потому что, если я смогу сохранить его в ViewData и получить к нему доступ, он устранит мои проблемы. Я не могу использовать TempData, потому что есть ряд других действий, которые могут быть вызваны между Select и Update ... Long question short, Как правильно реализовать ViewData для хранения и извлечения строки в моем контроллере?Полностью не понимает Посмотреть данные для MVC прямо сейчас, нужны некоторые серьезные примеры справки и кода

Некоторые фрагменты кода.

[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")) 

Как я могу получить эту работу, пожалуйста? Справка с благодарностью

+0

Вы можете использовать сеанс, если хотите что-то повторить по нескольким запросам. – ngm

ответ

1

ViewBag/ViewData работает только для отправки данных из действия в представление. Он не заполняется модулем Binder при запросе на действие, и его состояние не сохраняется между запросами, потому что ASP.net MVC полностью без гражданства. Другими словами, словарь ViewData всегда пуст в начале запроса.

Значение этой строки в вашем EditQuestion действия не будет работать:

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

ViewData пуст, поэтому _filterParams будет нулевым.

Вам необходимо вручную отправить filterParams в действии EditQuestion так же, как вы делаете для действия GetAllQuestions.

Возможно, лучшей альтернативой могло бы быть сохранение filterParams с использованием временного файла cookie на стороне клиента.

0

Таким образом, чтобы игнорировать всю дезинформацию, которую я прочитал по этому вопросу, InfpData Infact сохраняет многократные вызовы действий в контроллере и может быть использован для реализации необходимых мне функций.