2013-07-25 3 views
0

В приложении MVC4 в Create (post) action Я хочу передать int type list для просмотра, если возникла ошибка. А потом, оттуда передать его другому методу в том же контроллере с ajax-сообщением. Итак, TempData, ViewData и ViewBag мне не помогают.Как передать список int из действия для просмотра, затем из представления в метод в mvc 4?

public ActionResult Create(CreateModel model) 
     { 
      if(hasCustomError) 
      { 
        List<int> selectedItems = new List<int>() { 1, 2, 8 }; //for example. 
        ViewBag.VB = selectedItems; 

        //ViewData["VD"] = selectedItems; 
        //TempData["TD"] = selectedItems; 

        return View(model); 
      } 

      return RedirectToAction("Index"); 
     } 

После return View(model);, список selectedItems передается Create.cshtml зрения. Он имеет значение здесь, я проверил. Но отсюда следует передать этот список GetTreeData метода с помощью Ajax поста:

@{ 
    if (ViewBag.VB != null) 
     { 
      TempData["SelectedItems"] = ViewBag.VB as List<int>; 
     } 
} 


    $("#myTree").jstree({ 
     json_data: { 
      "ajax": { 
       url: "@Url.Action("GetTreeData", "MyController")", 
       type: "POST", 
       dataType: "json", 
       contentType: "application/json charset=utf-8" 
      } 
     }, 
     checkbox: { 
      real_checkboxes: true, 
      checked_parent_open: true 
     }, 
     plugins: ["themes", "json_data", "ui", "checkbox"] 
    }); 

В MyController в GetTreeData методы TempData["SelectedItems"] является null.

public string GetTreeData() 
     { 
      List<int> selecteds = null; 
      if (TempData["SelectedItems"] != null) 
      { 
       selecteds = TempData["SelectedItems"] as List<int>; 
       TempData["SelectedItems"] = null; 
      } 
      ...................................... 
     } 

Я пробовал это для всех (TempData, ViewData и ViewBag). Ничего не изменилось.

Как передать этот список из действия для просмотра, а затем из этого представления в метод?

+0

я нашел решение. Сначала я конвертирую список int в строковый список как «1,2,8», а затем url: «@ Url.Action (« GetTreeData »,« MyController », new {param = stringList})», –

ответ

1

Создать ViewModel, что ViewModel установить модель, которую вы используете сейчас, как поле, и добавить дополнительное поле для этого списка

+0

yes У меня есть не так, как я вижу. Я не найду никакого способа, сделаю это. –