2013-03-13 6 views
6

Miałem bardzo trudny czas, aby to rozwiązać (i jestem pewien, że robię jakiś głupi błąd gdzieś :)) Czy ktoś mógłby pomóc.Data wybrana przy użyciu JQuery Datepicker nie odzwierciedla się w modelu MVC3 przy przesyłaniu

Nie mogę odzyskać daty wybranej przy użyciu JQuery Datepicker w modelu podczas przesyłania. Daje mi wartość jako "1/1/0001 12:00:00 AM". Czy czegoś brakuje?

Aby wyizolować mój problem Stworzyłem prostą aplikację MVC3 przy użyciu szablonu z Visual Studio 2010. Szczegóły w następujący sposób:

modelu:

namespace DatePickerApp.Models 
{ 
    public class DatePickerClass 
    { 
     public DateTime BirthDate { get; set; } 
    } 
} 

Kontroler:

namespace DatePickerApp.Controllers 
{ 
    public class BirthDateController : Controller 
    { 

     // 
     // GET: /BirthDate/Create 

     public ActionResult Create() 
     { 
      return View(); 
     } 

     // 
     // POST: /BirthDate/Create 

     [HttpPost] 
     public ActionResult Create(DatePickerApp.Models.DatePickerClass DatePickerClass) 
     { 
      try 
      { 
       // TODO: Add insert logic here 

       return View(); 
      } 
      catch 
      { 
       return View(); 
      } 
     } 


    } 
} 

cshtml View :

@model DatePickerApp.Models.DatePickerClass 

@{ 
    ViewBag.Title = "Create"; 
} 

<h2>Create</h2> 
<link rel="stylesheet" href="http://code.jquery.com/ui/1.10.1/themes/base/jquery-ui.css" /> 
<script src="http://code.jquery.com/jquery-1.9.1.js"></script> 
<script src="http://code.jquery.com/ui/1.10.1/jquery-ui.js"></script> 
<link rel="stylesheet" href="/resources/demos/style.css" /> 

<script src="@Url.Content("~/Scripts/jquery.validate.min.js")" type="text/javascript"></script> 
<script src="@Url.Content("~/Scripts/jquery.validate.unobtrusive.min.js")" type="text/javascript"></script> 

<script type="text/javascript"> 
    $(document).ready(function() { 
     $("#date").datepicker({ dateFormat: 'dd/mm/yy' }); 
    }); 
</script> 

@using (Html.BeginForm()) { 
    @Html.ValidationSummary(true) 
    <fieldset> 
     <legend>DatePickerClass</legend> 

     <div class="editor-label"> 
      @Html.LabelFor(model => model.BirthDate) 
     </div> 
     <div class="editor-field"> 
      @Html.TextBoxFor(model => model.BirthDate, new { id = "date" }) 
      @Html.ValidationMessageFor(model => model.BirthDate) 
     </div> 

     <p> 
      <input type="submit" value="Create" /> 
     </p> 
    </fieldset> 
} 

<div> 
    @Html.ActionLink("Back to List", "Index") 
</div> 
+0

@ user216378 Czy próbowałeś już odpowiedzi? –

Odpowiedz

2

Dzieje się tak dlatego, że format daty z jQuery nie jest spodziewany format daty danymi DateTime w C#/VB. JQ zmienić format daty, aby być taka sama jak '1/1/0001 12:00:00 AM'

poprawny sposób mogą być: $("#date").datepicker({ dateFormat: 'dd/mm/yy hh:MM:ss' });

PS: ten '1/1/0001 0:00:00' jest domyślną wartość datetime w C#

Sprawdź dokumentacja: http://api.jqueryui.com/1.8/datepicker/#option-dateFormat

Również ten link może pomóc osiągnąć AM/PM udział: http://derekallard.com/blog/post/adding-time-to-jquery-ui-datepicker/

date_obj = new Date(); 
date_obj_hours = date_obj.getHours(); 
date_obj_mins = date_obj.getMinutes(); 

if (date_obj_mins < 10) { date_obj_mins = "0" + date_obj_mins; } 

if (date_obj_hours > 11) { 
    date_obj_hours = date_obj_hours - 12; 
    date_obj_am_pm = " PM"; 
} else { 
    date_obj_am_pm = " AM"; 
} 

date_obj_time = "'"+date_obj_hours+":"+date_obj_mins+date_obj_am_pm+"'"; 

$("#entry_date").datepicker({dateFormat: $.datepicker.W3C + date_obj_time}); 

pomocą tego kontrolera:

[HttpPost] 
    public ActionResult Index(DateTime? date) 
    { 
     //do something with date 
    } 

i to javascript w dokumencie gotowy:

$("[name=date]").datepicker({ dateFormat: "m/dd/yy" }); 

teraz data zostanie odpowiednio wypełniona.

+1

Witaj Floradu88, Zmieniłem format daty na * dateFormat: "m/dd/rr" * zgodnie z sugestią użytkownika i wydaje się, że działa. (W tej chwili nie potrzebuję części "czasu" :)) .. Trzy okrzyki .. Ale teraz prawdziwe pytanie brzmi, jak zostaną zachowane ustawienia regionalne?Chodzi mi o to, że jeśli chcę wyświetlać format daty jako "mm/dd/rrrr" na ekranie, to czy muszę zawsze przekonwertować go na format "m/dd/rrrr", aby wprowadzić go do modelu? Rozumiem, że kod datepaksu jest wystarczająco inteligentny, aby wyodrębnić poprawną datę, patrząc na ustawienia regionalne ... lub czy oczekuję zbyt wiele ... :) – user2163878

+0

jeśli użyjesz daty podanej: m/dd/yy da ci 03/15/2013 właśnie teraz. http://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript może być dobrym miejscem do rozpoczęcia wyszukiwania, polecam zachować format daty na całej witrynie. Ale możesz również użyć tego: http://bytes.com/topic/c-sharp/answers/245538-how-can-can-i-date-formatted-acording-regional-settings-made-operating-system-level –

0

Nie jestem pewien, czy to pomoże. ale uważam, że robię to w ten sposób.

Tworzenie coś jak poniżej

<td>date</td><td><input type="text" id="date" name="date"></td></tr>

i wykorzystania request.getParameters("date");

Dzięki

+0

Jest to obejście, a nie poprawny sposób korzystania z technologii. To będzie taki sam wynik. –

+0

@ Floradu88: przepraszam int przypadku kapelusz –

+0

aby być bardziej precyzyjnym dostanie taką samą wartość domyślną, ponieważ data jest analizowana z DateTime.TryParse, który w jego przypadku spowoduje domyślną datę ze względu na format daty . –

Powiązane problemy