2013-03-13 9 views
6

Bunu çözmek için çok zor zamanlar geçirdim (ve eminim ki bir yerde aptalca bir hata yapıyorum :)) Birisi size yardımcı olabilir.JQuery kullanarak seçilen tarih Datepicker göndermek için MVC3 modelinde yansıtma yapmıyor

Gönderilirken modelde JQuery datepicker kullanılarak seçilen tarihi alamıyorum. Bana '1/1/0001 12:00:00' olarak değer veriyor. Bir şey mi eksik?

Modeli:

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

Denetleyici:

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 Görünüm aşağıdaki gibi

sorunumu izole etmek için Visual Studio 2010. Ayrıntıları bir şablon kullanarak basit MVC3 uygulaması yarattı :

@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 Henüz yanıtları denediniz mi? –

cevap

2

jquery adresinin tarih biçimini C# DateTime verileri tarafından beklenen biçim tarih olmadığı için bu durum/böyle bir şey oluşturma

VB. $("#date").datepicker({ dateFormat: 'dd/mm/yy hh:MM:ss' });

Dip not:

doğru bir yol olabilir Değişim jq tarih formatı '1/1/0001 12:00:00 AM' aynı olacak şekilde Bu '1/1/0001 00:00:00' C# varsayılan tarih saat değerdir

Kontrol belgeleri: http://derekallard.com/blog/post/adding-time-to-jquery-ui-datepicker/

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

Ayrıca, bu bağlantı am/pm bölümünü elde etmek için yardımcı olabilir

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}); 

kullanın bu kontrolör:

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

ve hazır belgede bu javascript:

şimdiki tarih buna göre doldurulacaktır.

+1

Merhaba Floradu88, Tarih biçimini * dateFormat olarak değiştirdim: "m/dd/yy" * sizin tarafınızdan önerildi ve bu çalışıyor gibi görünüyor. (Ben şu anda 'zaman' bölümüne ihtiyacım yok :)) .. üç şerefsiz .. Ama asıl soru şimdi bölgesel ayarlara nasıl bakılacağıdır?Yani, tarih biçimini ekranda 'mm/dd/yyyy' olarak göstermek istiyorsam, modele dönüştürmek için her zaman 'm/gg/yyyy' biçimine dönüştürmem gerekir mi? Anladığım kadarıyla, tarih ayarlayıcı kodu, bölgesel ayarlara bakarak doğru tarihi ayıklamak için yeterince akıllıydı ... ya da çok fazla bekleniyor muyum? :) – user2163878

+0

, belirtilen tarihi kullanırsanız: m/dd/yy size 03/15/2013 Şu anda. http://stackoverflow.com/questions/2388115/get-locale-short-date-format-using-javascript, aramanızı başlatmak için iyi bir yer olabilir, tüm sitenizde tarih biçimini korumanızı öneririz. Ama şunu da kullanabilirsiniz: http://bytes.com/topic/c-sharp/answers/245538-how-can-i-get-date-formatted-according-regional-settings-made-operating-system-level –

0

Bunun ggonna yardımı olup olmadığından emin değilim. ama ben bunu bu şekilde yapıyorum.

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

ve kullanım aşağıda request.getParameters("date");

teşekkür

+0

Bu, bir geçici çözümdür ve teknolojiyi kullanmanın doğru yolu değildir. Bu aynı sonuca sahip olacak. –

+0

@ Floradu88: –

+0

özür dilerim, daha kesin olması için aynı varsayılan değeri elde edeceğinden, tarih DateTime.TryParse ile ayrıştırılmıştır, çünkü bu durumda, tarihin biçimi nedeniyle varsayılan bir tarihle sonuçlanır . –

İlgili konular