2011-01-04 2 views
1

Я пытаюсь понять, что если на datepicker не выбрана дата, которая вместо отправки null будет отправлена ​​на сегодняшний день.Если значение Datetime = null, то используйте сегодняшнюю дату

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

вид страницы код даты

<div class="rowElem"> 
    <label for="Date">Date</label> 
    <div id="cal" style="float:left;"></div> 
    <%= Html.HiddenFor(h => Model.Date)%> 
</div> 

Jquery код DatePicker

$('#cal').datepicker({ 
      dateFormat: 'dd/mm/yy', 
      [setDefaults: ({ defaultDate: '-0d' }), 
      defaultDate: '-0d', tried both this and above line and neither worked] 
      onSelect: function (dt, inst) { 
       $('#Date').val(dt); 
      } 
     }); 

Контроллер создать пост код даты

oq.Date = DateTime.Parse(fc["Date"]); 
+0

Пример кода для описания переменных, откуда они исходят и в каком контексте они используются. Вы читали из базы данных, читаете ли вы из параметров запроса или что вы читаете? Это не на 100% ясно, как должно быть (или как можно ближе), когда вы задаете свой вопрос. –

+0

кроме [HttpPost] public ActionResult Create (FormCollection fc) { OPEQuestionnaire oq = new OPEQuestionnaire(); {единственный дополнительный бит информации, который я мог бы предоставить, - это то, что в базе данных у меня было это с принятием нулей, но Джеймс смог найти решение в любом случае – Myzifer

+0

Я использую только то, что было бы полезно на эту тему если есть jquery-решение, например, если какой код нужно изменить или добавить в datepicker – Myzifer

ответ

3

Вместо Parse вы можете использовать TryParse:

DateTime tmp = DateTime.MinValue; 
oq.Date = DateTime.TryParse(fc["Date"], out tmp) ? tmp : DateTime.Today; 
+0

это, вне tmp)) должно быть, из tmp), тогда все ошибки исчезнут, и если бы у меня не было ошибок, я бы скорее прокомментировал это. Edit-oh yeh и мне нужно было сменить fs на fc – Myzifer

+0

Извините, скопировано и вставлено из предыдущего редактирования. Обновлено. – James

+0

Kinda удивил, что с таким количеством просмотров эта тема и ответы на нее получили так мало голосов. – Myzifer

1

Разве вы не можете просто решить эту проблему на стороне сервера? Если нуль представляется дата использование сегодняшнюю:

if(fs["Date"] == null) 
    oq.Date = DateTime.Now; 
else 
    oq.Date = DateTime.Parse(fc["Date"]); 

Кроме того, вы действительно должны иметь более описательные имена на ваших переменных. Возможно, кто-то еще прочтет ваш код в будущем.

+0

, он все еще говорит, что он имеет значение null, но переходит в инструкцию else, чтобы сказать мне, что это недействительный DateTime. – Myzifer

+0

Он все еще говорит, что такое null? Является ли 'fc' null? 'oq' null? Постарайтесь быть настолько конкретными, насколько сможете, когда вы пишете вопрос и т. Д. И, как я уже сказал, используйте описательные имена переменных ... Вместо 'fc' используйте' formCollection', если это что. –

+0

[HttpPost] public ActionResult Create (FormCollection fc) { OPEQuestionnaire oq = new OPEQuestionnaire(); {oq.date показывался как null – Myzifer

0

Где находится fc. Если это вопрос с базой данных, вы можете использовать isnull (имя поля, getdate()) или функцию similary, чтобы она возвращалась сегодня, если поле равно null.

Mysql использует ifnull вместо isnull.

+0

fc означает FormCollection, так как datepicker является частью формы – Myzifer

2

Попробуйте это в C#:

DateTime date; 
if (!DateTime.TryParse(fc["Date"], out date)) 
    date = DateTime.Today; 

oq.Date = date; 

Отредактировано: основываясь на комментарий Myzifer в.

+0

+1, хорошая работа Quick Draw McGraw! – Brad

+0

Зачем использовать 'if (something! = True)'? выглядит странно. –

+0

@ Danny, хороший пункт. Интересно, почему я это сделал. Фиксация ... –

0

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

2
if (oq.Date == null) 
      { oq.Date = DateTime.Now; } 
      else 
      { oq.Date = DateTime.Parse(fc["Date"]); } 

Это работало, был в состоянии понять это ТНХ, чтобы Томас Янссон и Джексон Popes ответы.

+0

Как только я получу достаточно очков для голосования, я проголосую за ваши ответы Томас Янссон и Джексон Папы. – Myzifer

+0

Должно быть известно, что это будет не так просто, так как теперь он не принимает введенный ответ и принимает только сегодняшнюю дату – Myzifer

+0

Но если бы какой-либо из наших ответов помог вам, вы должны принять один из тех, исправлена ​​ваша проблема. Тем не менее, я думаю, что решение Джеймса является самым изящным. –

Смежные вопросы