2012-06-18 2 views
0

Я работаю над многостраничной формой оценки, в которой вопросы/ответы основаны на базе данных. В настоящее время я базовая система работает с Html.BeginForm через стандартный ASP.Net MVC.HOWTO: реализовать версию jQuery ASP.Net MVC «Сильно типизированные частичные представления»

На данный момент ключ для всей системы - это «сильно типизированные частичные виды». Когда вопрос/ответ считывается из базы данных, тип ответа определяет, какая производная модель создается и добавляется в коллекцию. Основной вид он выполняет итерацию через коллекцию и использует систему ASP.NET MVC с «сильно типизированными частичными представлениями», чтобы определить, какое представление отображает правильный тип ответа (переключатель, выпадающее меню или текстовое поле).

Я хотел бы изменить этот процесс из Html.BeginForm в Ajax.BeginForm. Проблема в том, что я не имею понятия о том, как реализовать динамическое создание вопроса/ответа в мире JavaScript/jQuery. Любые мысли и/или предложения?

Дополнительно:

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

Одна из проблем заключается в том, что когда вход ASP.Net MVC установлен в режим только для чтения, его значение не отправляется обратно. Решение представляет собой скрытый ввод с текущим значением. Это скрытое значение должно управляться JavaScript как в случае изменения значения пользователем, так и с помощью механизма правил.

В целом, кажется, очень сложно управлять. Логичнее, что код ASP.Net MVC просто предоставляет JSON-модель, а jQuery просто создает формы в браузере, а затем вызывает либо действие сохранения, либо действие проверки пропусков, передавая ему модель JSON. Кажется, чтобы удалить один слой головной боли :)

Вот текущий код, чтобы генерировать динамическую форму:

@using (Html.BeginForm(new { mdsId = @Model.MdsId, sectionId = @Model.SectionId })) 
{ 
    <div class="SectionTitle"> 
     <span>Section @Model.SectionName - @Model.SectionDescription</span> 
     <span style="float: right">@Html.CheckBoxFor(x => x.ShowUnansweredQuestions) Show only unaswered questions</span> 
    </div> 

    @Html.HiddenFor(x => x.PrevSectionId) 
    @Html.HiddenFor(x => x.NextSectionId) 

    for (var i = 0; i < Model.answers.Count(); i++) 
    { 
     @Html.EditorFor(m => m.answers[i]); 
    } 
} 

ответ

2

Вы можете отправить запрос AJAX на действие контроллера, который будет возвращать частичный вид, содержащий правильную разметку с использованием строго типизированного частичного представления и вставить это частичное в DOM. Стивен Сандерсон имеет приятное сообщение в блоге по этой теме: http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/

+0

Хороший блог, но он просто добавляет html к концу того, что он уже там, и все еще использует традиционную почту. Моя ситуация немного сложнее, что я объясню в главном сообщении из-за пространства и форматирования в комментариях :) –

+0

Он использует AJAX для получения разметки динамически добавленного элемента. –

+0

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

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