Как работать с веб-сайтом, управляемым AJAX, в asp.net MVC (много просмотров и частичных просмотров)? - PullRequest
1 голос
/ 01 декабря 2010

Я нахожусь в процессе создания нового сайта, который будет использовать AJAX для просмотра содержимого страницы, если у пользователя включен javascript.

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

Однако с этим шаблоном мне нужно будет создать View и PartialView для каждой страницы сайта. Единственная реальная разница между ними заключается в включении главной страницы.

Неужели я упускаю уловку, разве это удвоение мнений - единственный путь?

Спасибо

РЕДАКТИРОВАТЬ - немного больше информации

Допустим, у меня была страница, к которой можно было получить доступ через /site/test. Где-то в моем JS я бы добавил хеш к URL, например, #/site/test. Затем JS будет отслеживать любые изменения хеш-функции и загружать частичные представления по мере необходимости. Если бы JS не был доступен, необходимо было бы вернуть весь вид.

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

1 Ответ

4 голосов
/ 01 декабря 2010

Серхио, да, тебе не хватает трюка !!

Вы должны организовать свою страницу так, чтобы статический контент в ней был просто статичным. Эта статическая страница затем вызывает партиал (ы), которые дают динамический контент. это обычно используется на главной странице как таковой (сейчас я использую jquery в соответствии с принятой позицией Microsoft по ajax):

<asp:Content ID="Content2" ContentPlaceHolderID="MainContent" runat="server">
    <h2>My Header</h2>
    <%--lots of stuff omitted--%>
    <div id="dynamicList"><%Html.RenderPartial("List"); %></div>
    <%--also lots missed out here--%>
    <input type="button" id="btnRefresh" value="refresh" />
</asp:Content>

это означает, что частичное всегда будет отображаться в начальном запросе. последующие обновления вызовут частичный метод в контроллере и снова заполнят div 'dynmaicList' в соответствии с:

<script type="text/javascript">
    // you might have a click or similar here to invoke the partial refresh
    $(function() {
         //click event (or some other 'change' event)
         $('#btnRefresh').click(function() {
             dynamicList();
         });
    });

    function dynamicList() {
        // where action/controller retruns a partialview result
        var url = '<%= Url.Action("List", "MyController") %>';
        // this is merely a wrapper method around jquery $ajax
        SendAjax(url, formParams(), beforedynamicListQuery, dynamicListResponse);
    }

    function beforedynamicListQuery() {
        $("#dynamicList").fadeTo('slow', 0.5);
    }

    function dynamicListResponse(data) {
        if (data.length != 0) {
            if (data.indexOf("ERROR:") >= 0) {
                $("#dynamicList_errmsg").html(data);
            }
            else {
                var selector = "#dynamicList";
                $(selector).fadeTo('slow', 1, function() {
                    $(this).html(data);
                });
            }
        }
    }
</script>

в любом случае, это мое мнение !! ;)

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