Как я передаю значение даты и времени как параметр URI в asp.net mvc?

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

Пример:

, Если необходимо было знать, как плавание хранилищ компилятора, просто попробуйте это:

uint32_t Int;
float flt = 10.5; // say

Int = *(uint32_t *)&flt;

printf ("Float 10.5 is stored internally as %8X\n", Int);

или

float flt = 10.5; // say

printf ("Float 10.5 is stored internally as %8X\n", *(uint32_t *)&flt);

Примечание умное использование преобразований типа. Преобразование адреса переменной (здесь & flt) к желаемому типу (здесь (uint32_t *)) и извлечение его содержания (применение '*').

Это работает другая сторона выражения также:

*(float *)&Int = flt;

Это могло также быть выполнено с помощью объединения:

typedef union
{
  uint32_t Int;
  float    flt;

} FloatInt_type;
57
задан DaveRandom 25 February 2013 в 17:41
поделиться

4 ответа

Двоеточие в URL-адресе вашего первого примера приведет к ошибке (неверный запрос), поэтому вы не сможете сделать именно то, что ищете. В остальном использование DateTime в качестве параметра действия наиболее вероятно.

Если вы используете маршрутизацию по умолчанию, эта третья часть URL-адреса вашего примера будет использовать значение DateTime в качестве параметра {id}. Итак, ваш метод Action может выглядеть следующим образом:

public ActionResult Index(DateTime? id)
{
    return View();
}

Вы, вероятно, захотите использовать Datetime, допускающее значение NULL, как и я, поэтому, если этот параметр не включен, это не вызовет исключения. Конечно, если вы не хотите, чтобы он назывался «id», добавьте другую запись маршрута, заменив {id} вашим именем по вашему выбору.

Пока текст в URL-адресе будет преобразован в допустимое значение DateTime, это все, что вам нужно сделать. Что-то вроде следующего работает нормально и будет без ошибок уловлено в вашем методе Action:

<%=Html.ActionLink("link", "Index", new { id = DateTime.Now.ToString("dd-MM-yyyy") }) %>

Загвоздка в этом случае, конечно, в том, что я не включил время. Я не уверен, что есть какие-либо способы отформатировать (действительную) строку даты со временем, не представленным двоеточиями, поэтому, если вы ДОЛЖНЫ включить время в URL-адрес, вам может потребоваться использовать свой собственный формат и проанализировать результат обратно в DateTime вручную. Допустим, мы заменили двоеточие на "!" в ссылке на действие: new {id = DateTime.Now.ToString ("dd-MM-yyyy HH! mm")} .

Ваш метод действия не сможет проанализировать это как дату, поэтому лучше bet в этом случае, вероятно, примет его как строку:

public ActionResult Index(string id)
{
    DateTime myDate;
    if (!string.IsNullOrEmpty(id))
    {
        myDate = DateTime.Parse(id.Replace("!", ":"));
    }
    return View();
}

Изменить: Как отмечалось в комментариях, есть некоторые другие решения, возможно, лучше, чем мое. Когда я изначально писал этот ответ, я считаю, что пытался сохранить суть формата даты и времени как можно лучше, но, очевидно, кодирование URL-адресов было бы более правильным способом справиться с этим. +1 к комментарию Влада.

Ваш метод действия не сможет проанализировать это как дату, поэтому лучше всего в этом случае, вероятно, принять его как строку:

public ActionResult Index(string id)
{
    DateTime myDate;
    if (!string.IsNullOrEmpty(id))
    {
        myDate = DateTime.Parse(id.Replace("!", ":"));
    }
    return View();
}

Изменить: Как отмечено в комментариях, возможно, есть некоторые другие решения лучше, чем моя. Когда я изначально писал этот ответ, я считаю, что пытался сохранить суть формата даты и времени как можно лучше, но, очевидно, кодирование URL-адресов было бы более правильным способом справиться с этим. +1 к комментарию Влада.

Ваш метод действия не сможет проанализировать это как дату, поэтому лучше всего в этом случае, вероятно, принять его как строку:

public ActionResult Index(string id)
{
    DateTime myDate;
    if (!string.IsNullOrEmpty(id))
    {
        myDate = DateTime.Parse(id.Replace("!", ":"));
    }
    return View();
}

Изменить: Как отмечено в комментариях, возможно, есть некоторые другие решения лучше, чем моя. Когда я изначально писал этот ответ, я считаю, что пытался сохранить суть формата даты и времени как можно лучше, но, очевидно, кодирование URL-адресов было бы более правильным способом справиться с этим. +1 к комментарию Влада.

37
ответ дан 24 November 2019 в 19:38
поделиться

Использовать значение тиков. Довольно просто перестроить в структуру DateTime

 Int64 nTicks = DateTime.Now.Ticks;
 ....
 DateTime dtTime = new DateTime(nTicks);
13
ответ дан 24 November 2019 в 19:38
поделиться

Типичным форматом URI для ASP .NET MVC является Controller / Action / Id, где Id - целое число

Я бы посоветовал отправлять значение даты в качестве параметра, а не как часть route:

 mysite/Controller/Action?date=21-9-2009 10:20

Если это все еще вызывает проблемы, дата может содержать символы, которые не разрешены в URI и должны быть закодированы. Проверьте:

 encodeURIComponent(yourstring)

Это метод в Javascript.

На стороне сервера:

public ActionResult ActionName(string date)
{
     DateTime mydate;
     DateTime.Tryparse(date, out mydate);
}

FYI, любой параметр URL-адреса может быть сопоставлен с параметром метода действия, если имена совпадают.

5
ответ дан 24 November 2019 в 19:38
поделиться

Сначала вы должны добавить новый маршрут в global.asax:


routes.MapRoute(
                "MyNewRoute",
                "{controller}/{action}/{date}",
                new { controller="YourControllerName", action="YourActionName", date = "" }
            );

The на вашем контроллере:



        public ActionResult MyActionName(DateTime date)
        {

        }

Не забудьте сохранить маршрут по умолчанию в нижней части метода RegisterRoutes. Имейте в виду, что движок попытается преобразовать любое значение, которое вы отправляете в {date}, как пример DateTime, поэтому, если оно не может быть преобразовано, будет создано исключение. Если ваша строка даты содержит пробелы или: вы можете HTML.Encode их, чтобы URL мог быть правильно проанализирован. Если нет, то у вас может быть другое представление DateTime.

0
ответ дан 24 November 2019 в 19:38
поделиться
Другие вопросы по тегам:

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