2014-02-04 4 views
0

У меня есть контроллер, который генерирует следующий объект и передает его через View ViewBag:ASP.NET MVC: передать сложные данные в контроллер View

public class ObjectList 
{ 
    public ObjectItem[] Item { get; set; } 
} 


public class ObjectItem 
{ 
    public string Name { get; set; } 
    public decimal Value1 { get; set; } 
    public decimal Value2 { get; set; } 
} 

В представлении эти данные отображаются в виде Таблица. Blow the table У меня есть ActionLink, который должен передать все данные обратно контроллеру для дальнейшей обработки. Как я могу это сделать. Является ли ActionLink правильным выбором, это могут быть сотни OjectItems в Списке. Есть ли другой подход для этого?

Надеюсь, вы можете мне помочь.

+0

Являются ли данные доступными для просмотра в представлении? – JTMon

+0

Нет, только для чтения – crauscher

+0

Если данные доступны только для чтения и могут быть найдены на сервере, есть ли причина, по которой вы хотите передать все данные? не можете ли вы просто передать достаточную информацию на сервер, чтобы он мог снова получить эти данные? – JTMon

ответ

0

Думаю, что вы должны хранить данные в сеансе. Когда ссылка на действие отправляется обратно, вы просто получите версию данных, хранящихся в сеансе.

Как и в случае с ответом @JTMon, если вы используете ссылку для передачи данных обратно на сервер, вы должны проверить все данные (так как теперь пользователь вводит данные и может быть изменен). Вы можете использовать такие механизмы, как проверка CRC или HMAC.

0

Не уверен, что есть способ сделать это с помощью MVC, но то, что я обычно делаю, это использование jquery для прохождения элементов в таблице, нажатия на массив javascript и последующего передачи массива в качестве параметра при выполнении запроса к контроллеру MVC.

Например:

// Javascript variable that will contain the values 
var selectedPositionNumbers = new Array(); 

// In my case, i store the value of the row when user click a checkbox in the same row 
$('body').on('click', 'input[id*="IsSelected"]', function() { 
      var positionNr = $(this).attr('id').split("IsSelected")[1]; 
      var isChecked = $(this).is(':checked'); 
      if (isChecked) { 
       if ($.inArray(positionNr, selectedPositionNumbers) == -1) { 
        selectedPositionNumbers.push(positionNr); 
       } 
      } 
     }); 

// And later on when making the request 
$.ajax({ 
     url: '@Url.Action("SendSelectedValues")', 
     data: JSON.stringify({ positionNrList: selectedPositionNumbers }), 
     type: 'post', 
     contentType: 'application/json; charset=utf-8', 
     success: function (data) { 
      // Completed statement here 
     } 
    }); 

В моем случае мне нужно хранить только одно значение, так что я просто должен сделать массив строк, но для вашего случая, может быть, эта статья дает лучший пример: http://abiyh.blogspot.nl/2011/01/posting-javascript-array-using-jquery.html

+0

Привет! Можете ли вы поделиться мне каким-то кодом, как вы это делаете. На самом деле я новичок в MVC. – crauscher

+0

Обновлено, надеюсь, что это поможет –

0

Если информация имеет какое-либо критическое значение, я бы определенно сохранил ее копию на сервере (базу данных, файловую систему и т. Д.), И ActionLink отправит какой-то идентификатор обратно на сервер, чтобы получить его. Вам нужно будет очистить «неиспользуемые» данные (например, которые никогда не экспортировались и больше не нужны), но в зависимости от вашей ситуации это может быть безопаснее, чем подвергать пользователей закалке данными, которые, по вашему мнению, вы отправили.

Смежные вопросы