2016-12-20 1 views
0

Je travaille sur un problème mvc et j'ai trouvé mon auto coincé dans un problème en essayant de lier les données datetimepicker à mon action de contrôleur. J'ai une vue qui ajoute un partiel à la collection de vues partielles lorsque l'utilisateur fait une action.Boostrap Datetimepicker avec Html.hiddenpour ne pas lier les valeurs dans l'action du contrôleur

Mes modèles ressemble

public class CreateOCVM 
{ 

    private string errors { get; set; } 

    public operaciones_confidenciales oc { get; set; } 

    [Display(Name = "Restringidas")] 
    public ICollection<PersonaMin> restringidas { get; set; } 


public class PersonaMin 
{ 
    public int Id { get; set; } 
    public string motivo { get; set; } 
    [DataType(DataType.Date)] 
    public DateTime fecha_acceso; 

À mon avis je

@using (Html.BeginForm("CreateOC", "OC", FormMethod.Post, new { id = "form" })) 

<table id="personasRestringidas" class="table table-striped table-bordered table-hover"> 
           <thead> 
            <tr> 
             <th>id</th> 
             <th>Motivo</th> 
             <th>Fecha de acceso</th> 
             <th>Eliminar</th> 
            </tr> 
           </thead> 
           <tbody id="person"> 
            @foreach (PersonaMin item in Model.restringidas) 
            { 

              @Html.Partial("~/Views/OC/AddOCRestriccion.cshtml", item) 
            } 
           </tbody> 
          </table> 

Lorsque l'utilisateur fait une ations ajouter un nouvel élément à la restringidas ICollection. En faisant un appel ajax à une méthode de commande comme suit:

function addRestriccion(idPersona) { 
if (jQuery.inArray(idPersona, dataset) != 0) { 
    $.get('/OC/AddOCRestriccion', { id: idPersona}, function (template) { 
     dataset.push(idPersona); 
     $("#person").append(template); 
     $('#datetimepicker' + idPersona).datetimepicker(); 
     $('#datetimepicker' + idPersona).datetimepicker({ format: "DD/MM/YYYY hh:mm" }); 
     $("#datetimepicker" + idPersona).on("change.dp", function (e) { 
      $('#fechaAcceso' + idPersona).val($("#datetimepicker" + idPersona).datepicker('getFormattedDate')) 
     }); 
    }); 
} 

Cet appel d'une méthode de commande d'un retourne une vue partielle qui sera ajouté à la vue principale.

 [HttpGet] 
    public ActionResult AddOCRestriccion(Int32 id) 
    { 
     PersonaMin item = new PersonaMin(); 
     item.Id = id; 
     persona p = PersonaCollection.getPersonasById(id); 
     return PartialView("AddOCRestriccion", item); 
    } 

Edit: Ce contrôleur renvoie la vue partielle d'ajouter dans le principal.

<tr> 
@using (Html.BeginCollectionItem("restringidas")) 
{ 
    <td> 
     @Html.HiddenFor(model => model.Id) 
     @Html.DisplayFor(model => model.Id, new { @placeholder = "id", @id = "ID" }) 
    </td> 
    <td> 
     @Html.TextAreaFor(model => model.motivo, new { @placeholder = "motivo", @id = "motivo", @class = "form-control" }) 
    </td> 
    <td> 
     <div class='input-group date' id="@("datetimepicker" + Model.Id)"> 
      <input type='text' class="form-control" /> 
      <span class="input-group-addon"> 
       <span class="glyphicon glyphicon-calendar"></span> 
      </span> 
      @Html.HiddenFor(model => model.fecha_acceso, new { @id = "fechaAcceso" + Model.Id }) 
     </div> 
    </td> 
    <td class="text-center"> 
     <span class="input-group-btn"> 
      <button type="button" class="btn btn-primary" onclick="deleteAnother($(this).parent().parent())"> 
       <i class="fa fa-minus"></i> 
      </button> 
     </span> 
    </td> 

} 

Quand je soumets la forme qu'elle est gérée par l'action du contrôleur

 [HttpPost] 
    public ActionResult CreateOC(CreateOCVM ocvm) 
    { ... do something .... 

Le problème est que quand je vérifie les valeurs sur mon modèle toutes les valeurs sont ok, mais pas un pour le datetime (fecha_acceso)

À mon avis le champ caché pour ma propriété date-heure a une valeur sur elle.

enter image description here

Mais le changement de valeur quand je vérifie sur la méthode du contrôleur.

enter image description here

J'ai essayé avec aproaches diférents mais je reçois toujours des données erronées sur ma méthode du contrôleur. Est-ce que quelqu'un sait ce qui se passe? Ou quelqu'un a une approche différente qui peut m'aider à faire la même chose?

Merci.

Répondre

0

Par défaut, le contrôleur ne permet pas le format de date comme jj-mm-aaaa. Ajouter ci-dessous des lignes dans votre fichier web.config pour le faire

<configuration> 
    <system.web> 
     <globalization culture="en-GB" /> 
    </system.web> 
</configuration> 
+0

J'ai essayé ceci et n'ai pas fonctionné, j'ai également essayé de formater le datetime avant de le passer au contrôleur et ai eu le même comportement. – Jose

+0

J'ai également essayé ceci et ai obtenu la valeur nulle – Jose

+0

Avez-vous besoin de moi pour le faire encore et envoyer la capture d'écran? – Jose

0

On dirait que mon aide de Html.BeginCollectionItem a des problèmes avec DateTime changement pour y de type de mon viewmodel de datetime à chaîne. Je sais que c'est une solution de contournement et pas la bonne solution, mais le manque de temps me force à le faire.