2015-02-17 1 views
0

Я работаю над своим первым приложением ASP.NET MVC 4 (C#). Я сделал приложение, которое подключается к базе данных MongoDB. Я сделал одну страницу с формой ввода, на одной странице со списком, который отображает данные, и я сделал одну страницу с формой редактирования/обновления для редактирования сохраненных данных.Несколько обновляемых частичных представлений в одном представлении

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

Я прочел о partial pages и master page (_Layout). И я прочитал, что могу обновить partial pages с помощью javascript/jQuery.

Поскольку я новичок в ASP.NET MVC, я хочу знать, является ли это правильным и лучшим способом достижения моей цели, или есть лучший способ. Кроме того, было бы неплохо иметь некоторые советы о том, что важно.

+1

Да, использование AJAX в jQuery для вызова методов контроллера для выполнения сохранения и т. Д. Улучшит работу пользователя.Что касается реализации, то гораздо лучше рассмотреть возможность использования инфраструктуры на стороне клиента, такой как AngularJS и Knockout, чтобы вы обновили динамическую версию своей модели на стороне клиента. Обновление скрытых полей в jQuery может стать очень грязным довольно быстро. – mattytommo

+0

Благодарим вас за информацию! Я посмотрю на AngularJS и Knockout – bbvanee

ответ

0

В MVC у вас есть виды, частичные виды и макеты. Все это «взгляды» и, по большей части, различие заключается только в том, как вы их используете.

Частичный вид - это просто представление, которое отображается без макета, что может быть сделано с помощью 1) возврата PartialView из действия или 2) с помощью вспомогательного помощника Html.Partial Razor.

Макет - это просто представление, на которое ссылается макет для другого вида. Это может быть достигнуто либо 1) вручную, указав макет в представлении через Layout = "~/Views/SomeLayout.cshtml";, либо 2), используя файл _ViewStart.cshtml. Единственное, что делает макет, отличный от любого другого представления, - это вызов @RenderBody(), который указывает, где визуализированный результат любых ссылок на изображение должен быть помещен.

Это очень краткое руководство к представлениям в ASP.NET MVC. Когда дело доходит до использования чего-то вроде AJAX для замены части страницы, важно понять, что на данный момент жизненного цикла страницы нет такой вещи, как частичные представления, макеты и т. Д. Все, что у вас есть, это HTML, который браузер получен от сервера и используется для построения внутреннего представления веб-страницы, называемой «DOM» или Document Object Model. Вы не можете просто заменить «частичный вид» на странице; вы должны заменить часть DOM. Это может звучать как семантика, но это важное различие, потому что клиент, в данном случае веб-браузер, не имеет понятия о том, какие части документа были или не были отображены с помощью частичных представлений на стороне сервера, и не заботится ,

Однако, источник вашей замены может быть частичным, по крайней мере, в том смысле, что вы можете использовать частичный вид для создания результата, который может быть отправлен клиенту в качестве ответа. Метод действия, который отвечает на ваш запрос AJAX, может возвращать PartialView("_SomePartialView"), и это представление будет отображаться с любыми переданными ему данными без макета и отправляться клиенту в качестве ответа. На данный момент, однако, это просто HTML, и, опять же, не имеет значения, как был создан этот HTML-код. Обратный вызов для вашего запроса AJAX получит этот HTML-код и затем должен что-то сделать с ним. В отличие от обычного запроса браузера, браузер не будет делать ничего с этим ответом автоматически (т. Е. Отображает на нем веб-страницу). Вы несете ответственность за выбор части DOM, которую хотите заменить, и вставьте этот HTML-ответ в этот DOM.

+0

Спасибо за этот обширный ответ! – bbvanee