2009-08-28 11 views
1

J'ai un DatePicker qui fonctionne sur une vue à laquelle un ViewModel est également associé. Lorsque j'exécute l'action Post sur le contrôleur, le ViewModel est de nouveau instancié et certaines valeurs ne sont pas disponibles dans la vue.ASP.Net MVC et jQuery DatePicker ViewModel

Le contrôleur d'action est:

public ActionResult Search() 
    { 
     ProjectSearchViewModel viewModel = 
      new ProjectSearchViewModel(
       DateTime.Today.AddMonths(-1), 
       DateTime.Today.AddDays(1)); 

     return View(viewModel); 
    } 

    [AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult Search(ProjectSearchViewModel viewModel) 
    { 
     try 
     { 
      //Always returns a value from UI 
      DateTime startDate = viewModel.StartDate; 
      //NEVER returns a Value from UI 
      DateTime endDate = viewModel.EndDate; 

.....

Le balisage View est:

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/TabbedViewMasterPage.master" Inherits="System.Web.Mvc.ViewPage<Reactivity.Web.Models.ProjectSearchViewModel>"%>

...

<label for="StartDate"> 
     Start Date: 
    </label> 
    <% Html.jQuery().DatePicker() 
      .Name("StartDate") 
      .AllowMonthChange(true) 
      .AllowYearChange(true) 
      .ShowOn(DatePickerShowOn.Focus) 
      .ShowOtherMonths(true) 
      .Value(ViewData.Model.StartDate) 
      .Render(); %> 
    <br /> 
    <label for="EndDate"> 
     End Date: 
    </label> 
    <% Html.jQuery().DatePicker() 
      .Name("EndDate") 
      .AllowMonthChange(true) 
      .AllowYearChange(true) 
      .ShowOn(DatePickerShowOn.Focus) 
      .ShowOtherMonths(true) 
      .Value(ViewData.Model.EndDate) 
      .Render(); %> 
    <br /> 
    <input type="submit" value="Search" /> 

Le programme DatePicker (deux instances sur View) fonctionne correctement.

Comment puis-je m'assurer que les champs ViewModel (viewModel.EndDate) sont retournés dans l'action du contrôleur? Ou est-ce un problème d'avoir deux (MVC) DatePickers sur le formulaire?

Un grand merci Brian

Répondre

1

Ok, il y a deux problèmes ici:

  1. je suis nouveau pour MVC, etc., et ont mis les Telerik MVC extensions pour mon projet qui vous Les gars de jQuery sauront que le code ci-dessus est Telerik CTP. Désolé pour ça.

  2. Le problème à la fin était plutôt intéressant. Le code ci-dessus ne gérait pas correctement la localisation des dates, de sorte que les dates saisies dans le fichier datepicker avec la localisation du navigateur dans l'anglais autre que l'anglais étaient traitées comme un format US tel que sélectionné le 28/07/2009.) Le wrapper Telerik pour le contrôle datepicker ne le transmettait pas ou quelque chose dans le pipeline le rejetait. Le résultat était que toutes les dates au-delà du 12 du mois n'étaient pas retournées.

J'espère que cela aidera quelqu'un d'autre le long du chemin.

Brian