Как я реализую промежуточную “загрузку …” страница в ASP.NET MVC?

String обозначает System.String, и это - тип Платформы.NET. string псевдоним на языке C# для System.String. Они оба компилируются в [1 111] System.String на (промежуточном языке) IL , таким образом, нет никакого различия. Выберите то, что Вы любите и используете это. Если бы Вы кодируете в C#, я предпочел бы string, поскольку это - псевдоним типа C# и известный программистами C#.

я могу сказать то же [приблизительно 1 112] (int, System.Int32) и т.д.

6
задан goodguys_activate 8 October 2011 в 03:22
поделиться

3 ответа

Вы можете сделать это следующим образом:

  • выполните поисковый запрос (URL-адрес GET) с помощью AJAX
  • URL-адрес поиска не возвращает результаты, но возвращает некоторое содержимое Json или XML с URL-адресом фактических результатов
  • ; клиентская страница показывает сообщение «загрузка ...», ожидая завершения вызова AJAX
  • ; по завершении клиентская страница перенаправляет на страницу результатов.

Пример использования jquery:

<div id="loading" style="display: none">
  Loading...
</div>
<a href="javascript:void(0);" 
  onclick="searchFor('something')">Search for something</a>

<script type="text/javascript">
  function searchFor(what) {
    $('#loading').fadeIn();
    $.ajax({ 
      type: 'GET', 
      url: 'search?query=' + what, 
      success: function(data) { 
        location.href = data.ResultsUrl; 
      } 
    });        
  }
</script>

(edit:)

Контроллер будет примерно таким:

public class SearchController 
{
  public ActionResult Query(string q) 
  {
    Session("searchresults") = performSearch();
    return Json(new { ResultsUrl = 'Results'});
  }

  public ActionResult Results()
  {
    return View(Session("searchresults"));
  }
}

Считайте это псевдокодом: я фактически не тестировал его.

2
ответ дан 10 December 2019 в 02:49
поделиться

Чтобы сохранить его без использования JavaScript, вы можете разбить поиск на несколько действий.

Первое действие (/ Search /? Q = whodunit) просто выполняет некоторую проверку ваших параметров (чтобы вы знали, нужно ли вам повторно отображать форму), а затем возвращает представление, которое использует мета-обновление, чтобы указать браузеру обратно на «настоящее» действие поиска.

Вы можете реализовать это с помощью двух отдельных действий контроллера. (скажем, «Поиск и результаты»):

public ActionResult Search(string q)
{
    if (Validate(q))
    {
        string resultsUrl = Url.Action("Results", new { q = q });
        return View("ResultsLoading", new ResultsLoadingModel(resultsUrl));
    }
    else
    {
        return ShowSearchForm(...);
    }
}

bool Validate(string q)
{
    // Validate
}

public ActionResult Results(string q)
{
    if (Validate(q))
    {
        // Do Search and return View
    }
    else
    {
        return ShowSearchForm(...);
    }
}

Но это дает вам некоторые затруднения в плане обновления. Таким образом, вы можете повторно объединить их в одно действие, которое может сигнализировать о двухфазном процессе с помощью TempData.

static string SearchLoadingPageSentKey = "Look at me, I'm a magic string!";

public ActionResult Search(string q)
{
    if (Validate(q))
    {
        if (TempData[SearchLoadingPageSentKey]==null)
        {
            TempData[SearchLoadingPageSentKey] = true;
            string resultsUrl = Url.Action("Search", new { q = q });
            return View("ResultsLoading", new ResultsLoadingModel(resultsUrl));
        }
        else
        {
            // Do actual search here
            return View("SearchResults", model);
        }
    }
    else
    {
        return ShowSearchForm(...);
    }
}

Это охватывает пункты 2, 3, 4 и, возможно, 5.

Включение поддержки № 1 подразумевает что вы собираетесь сохранять результаты поиска в сессиях, db и т. д.

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

if (TempData [SearchLoadingPageSentKey] == null)

становится

if (TempData [SearchLeadingPageSentKey] == null &&! SearchCache.ContainsKey (q))

5
ответ дан 10 December 2019 в 02:49
поделиться

Хороший вопрос. Возможно, мне вскоре придется реализовать аналогичное решение в asp.net mvc самому, но я не думаю, что это потребует принципиально иной реализации, чем решение на основе веб-форм, различные примеры которого есть в сети:

Я ранее создавал реализацию на основе первой ссылки выше с веб-формами. Основной процесс:

  1. Начальная страница запрашивается с параметрами поиска
  2. Эта страница запускает новый поток, который выполняет длительную задачу.
  3. Эта страница перенаправляет пользователя на страницу «в процессе», которая имеет Заголовок обновления http настроен на перезагрузку каждые пару секунд
  4. Поток, выполняющий поиск, обновляет «глобальный» статический объект прогресса поиска, указывающий% завершения, и страница незавершенного процесса читает из него, отображая ход выполнения. (каждый поиск хранится с помощью идентификатора GUID в Hashtable, поэтому поддерживается несколько одновременных поисков)
  5. После завершения поток обновляет прогресс поиска как таковой, и когда страница нижнего процесса обнаруживает это, он перенаправляется на финальный " Это совершенно другое решение, но я не только бегло рассмотрел его.)

    Преимущество этого заключается в том, что для него вообще не требуется Javascript. Самый большой недостаток, о котором я могу думать (с точки зрения пользователя), заключается в том, что это не совсем "Web 2.0", и пользователям придется ждать, пока не обновится браузер.

    Что-то основано на предложении @Jan Willem B на основе AJAX должен быть жизнеспособной альтернативой этому многопоточному шаблону состояния ожидания. Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен отвечать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

    Это совершенно другое решение, но я не только бегло рассмотрел его.)

    Преимущество этого метода в том, что оно вообще не требует Javascript. Самый большой недостаток, о котором я могу думать (с точки зрения пользователя), заключается в том, что это не совсем "Web 2.0", и пользователям придется ждать, пока не обновится браузер.

    Что-то основано на предложении @Jan Willem B на основе AJAX должен быть жизнеспособной альтернативой этому многопоточному шаблону состояния ожидания. Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен соответствовать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

    Самый большой недостаток, о котором я могу думать (с точки зрения пользователя), заключается в том, что это не совсем "Web 2.0", и пользователям придется ждать, пока не обновится браузер.

    Что-то основано на предложении @Jan Willem B на основе AJAX должен быть жизнеспособной альтернативой этому многопоточному шаблону состояния ожидания. Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен отвечать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

    Самый большой недостаток, о котором я могу думать (с точки зрения пользователя), заключается в том, что это не совсем "Web 2.0", и пользователям придется ждать, пока не обновится браузер.

    Что-то основано на предложении @Jan Willem B на основе AJAX должен быть жизнеспособной альтернативой этому многопоточному шаблону состояния ожидания. Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен соответствовать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

    Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен отвечать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

    Что лучше всего соответствует вашим требованиям, вам придется решать самостоятельно. Пример с aspfree.com, который я опубликовал, должен соответствовать большинству ваших требований и работать с MVC так же хорошо, как и с веб-формами.

2
ответ дан 10 December 2019 в 02:49
поделиться
Другие вопросы по тегам:

Похожие вопросы: