ASP.net mvc3 Получить данные из представления в контроллер C # - PullRequest
0 голосов
/ 11 октября 2011

В настоящее время я использую ViewBag для передачи таблицы данных и некоторых других динамических данных в представление.Данные отображаются пользователю в таблице, и в зависимости от того, какие столбцы выбирает пользователь, выполняются определенные вычисления.Моя проблема заключается в том, что эти вычисления должны быть связаны между собой, чтобы, когда пользователь выполняет вычисление, состояние данных сохранялось, и тогда были возможны дальнейшие вычисления для этих данных.

Как получить текущийсостояние данных из представления в контроллер каждый раз?Расчеты должны быть выполнены на этом текущем состоянии.

Если это имеет какое-то значение, я мог бы легко изменить представление в строго типизированное представление и создать новый объект для абстрагирования данных и других динамических данных.

Любой совет приветствуется.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 11 октября 2011

Я призываю вас избегать DataTables и DataSets, если это возможно. Их следует рассматривать как наихудший вид DTO, поскольку вы никогда не сможете гарантировать, что они содержат и когда (если вы не будете следовать цепочке вызовов обратно к их источнику и убедитесь, что они нигде не меняются в пути).

Используя правильные модели представления, вы узнаете, что они содержат, просто взглянув на них, а также можете поместить всю логику форматирования внутри них, а не в представление.

Я написал в блоге запись о том, почему вы должны использовать модели представления: http://blog.gauffin.org/2011/07/three-reasons-to-why-you-should-use-view-models/

Что касается вашего вопроса: самый простой способ - использовать jQuery / Ajax и возвращать Json (что легко, если вы используете правильные модели представления).

<script type="text/javascript">
 $(function() { //<-- runs the script when the document has been loaded

    $('#formid').submit(function() { // <--- hook form submit event

        $.post('@Html.Action("CalcOne")?option='+ $('#id').val(), function(data) {
            var result = data.result;
            $.post('@Html.Action("CalcTwo")?option='+ result, function(data) {
                    //do third calc
            });
        });
    });
 });
</script>

А в вашем контроллере:

[HttpPost]
public ActionResult CalcOne(int option)
{
    //do some calculations
    return Json(new MyModel{ Result = option + 1 });
}
0 голосов
/ 11 октября 2011

Для меня это звучит как AJAX.Вы должны быть в состоянии отправить состояние обратно на сервер (другой метод в вашем контроллере) и сохранить его так, как вам нужно.

В MVC3 есть несколько замечательных JSON-материалов, которые должны упростить вашу жизнь.Это + JQuery, вы должны смеяться.

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