условно запустить код в cshtml на основе URL [duplicate]

Другие два варианта:

Базовый пакет:

df <- unstack(dat1, form = value ~ numbers)
rownames(df) <- unique(dat1$name)
df

sqldf package:

library(sqldf)
sqldf('SELECT name,
      MAX(CASE WHEN numbers = 1 THEN value ELSE NULL END) x1, 
      MAX(CASE WHEN numbers = 2 THEN value ELSE NULL END) x2,
      MAX(CASE WHEN numbers = 3 THEN value ELSE NULL END) x3,
      MAX(CASE WHEN numbers = 4 THEN value ELSE NULL END) x4
      FROM dat1
      GROUP BY name')
121
задан Jonas 13 December 2011 в 00:41
поделиться

6 ответов

У нас была ситуация, когда нам нужно было сохранить хэш URL-адресов через обратную связь ASP.Net. Поскольку браузер не отправляет хэш на сервер по умолчанию, единственный способ сделать это - использовать Javascript:

  1. Когда форма отправляется, возьмите хэш (window.location.hash) и сохраните его в скрытом поле ввода на стороне сервера. Поместите это в DIV с идентификатором «urlhash», чтобы мы могли легко найти его позже.
  2. На сервере вы можете использовать это значение, если вам нужно что-то с этим делать. Вы можете даже изменить его, если вам нужно.
  3. При загрузке страницы на клиенте проверьте значение этого скрытого поля. Вы захотите найти его в DIV, в котором он содержится, поскольку автогенерированный идентификатор не будет известен. Да, вы могли бы сделать некоторые обманы здесь с .ClientID, но нам было проще просто использовать обертку DIV, поскольку она позволяет всему этому Javascript жить во внешнем файле и использоваться в общем виде.
  4. Если скрытое поле ввода имеет допустимое значение, установите его как хэш URL (window.location.hash again) и / или выполните другие действия.

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

Перед подачей:

$("form").submit(function() {
  $("input", "#urlhash").val(window.location.hash);
});

При загрузке страницы:

var hashVal = $("input", "#urlhash").val();
if (IsHashValid(hashVal)) {
  window.location.hash = hashVal;
}

IsHashValid() может проверять «undefined» или другие вещи, которые вы не хотите обрабатывать.

Кроме того, make конечно, вы, конечно, используете $(document).ready().

125
ответ дан DreamTeK 22 August 2018 в 19:50
поделиться
  • 1
    Отличное решение, но что такое запрос GET? – Warlock 1 June 2013 в 16:57
  • 2
    Без получения запросов это решение ничего. – Orhun Alp Oral 9 July 2013 в 21:31
  • 3
    @Chris. Но как вызов формы-отправки вызывается, когда вы просто вставляете URL-адрес в другом браузере (потому что это всего лишь запрос GET)? – KrishPrabakar 15 July 2013 в 10:22
  • 4
    быстрое решение. сделал мой день. благодаря! – Pete 22 February 2014 в 15:46
  • 5
    @Warlock, независимо от get / post, он будет работать, поскольку вы храните хэш в скрытом поле. – KMX 14 January 2015 в 04:45

Это потому, что браузер не передает эту часть на сервер, извините.

36
ответ дан Julien Oster 22 August 2018 в 19:50
поделиться

RFC 2396 раздел 4.1:

Когда ссылка URI используется для выполнения поиска по идентифицированному ресурсу, необязательный идентификатор фрагмента, отделенный от URI посредством символа crosshatch ("#"), состоит из дополнительной справочной информации, которая должна быть интерпретирована пользовательским агентом после успешного завершения поиска. Таким образом, он не является частью URI, но часто используется в сочетании с URI.

(выделено мной)

75
ответ дан Mauricio Scheffer 22 August 2018 в 19:50
поделиться
  • 1
    Я удивлен. Я много читал о SPA и не знал об этом. Итак, браузер отправляет так много конфиденциальной информации, но не хэш ??? Я думаю, что это должно произойти в будущем .. по крайней мере, как отдельный HTTP-заголовок. Это связано с: onebigfluke.com/2015/01/… – bodrin 12 February 2015 в 18:42

Просто, чтобы исключить возможность того, что вы на самом деле не пытаетесь увидеть фрагмент в GET / POST и на самом деле хотите узнать, как получить доступ к той части объекта URI, которая у вас есть в вашем серверном коде, она находится под Uri.Fragment ( Документы MSDN ).

3
ответ дан patridge 22 August 2018 в 19:50
поделиться
  • 1
    IE8, Chrome и Firefox все не отправят хэш на сервер; так что Uri.Fragment всегда является пустой строкой, если вы исследуете серверную часть Request.Url.Fragment (в соответствии с вышеприведенными ответами). – zcrar70 3 May 2011 в 19:50

Вероятно, единственный выбор - прочитать его на стороне клиента и перенести его вручную на сервер (GET / POST / AJAX). С уважением Артур

Вы также можете посмотреть, как играть с кнопкой «Назад» и историей браузера на Malcan

7
ответ дан user 22 August 2018 в 19:50
поделиться

Возможное решение для запросов GET:

Новый формат ссылки: http://example.com/yourDirectory?hash=video01

Вызовите эту функцию к верхней части контроллера или http://example.com/yourDirectory/index.php:

function redirect()
{
    if (!empty($_GET['hash'])) {
        /** Sanitize & Validate $_GET['hash']
               If valid return string
               If invalid: return empty or false
        ******************************************************/
        $validHash = sanitizeAndValidateHashFunction($_GET['hash']);
        if (!empty($validHash)) {
            $url = './#' . $validHash;
        } else {
            $url = '/your404page.php';
        }
        header("Location: $url");
    }
}
0
ответ дан webaholik 22 August 2018 в 19:50
поделиться
Другие вопросы по тегам:

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