2013-05-29 15 views
6

ho un problema nel ASP.NET MVC-Helper Ho una forma che danno un POST in azione ** creare del controllore occorrenza passando un parametro di tipo occorrenza quello corrispondente al modello del vista cui è inserito il modulo , per registrare il verificarsi è necessaria una TypeOccurrenceID, sto cercando di ottenere questo valore utilizzando Html.DropDownListFor (), ma questo no a lavorare quando il modulo viene inviato, il Presenza passato nel parametro non hanno l'OccurrenceTypeId corrispondente al OccurrenceType selezionato nella DropDownListKendo DropDownListFor() con ASP.NET MVC-

Qualcuno aveva lo stesso problema?

Questa è la mia azione di controllo

[HttpPost] 
    public ActionResult Create(Occurrence occurrence) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       db.Add<Occurrence>(occurrence); 
       return new HttpStatusCodeResult(200); 
      } 
      catch (Exception) 
      { 
       return new HttpStatusCodeResult(400); 
      } 
     } 
     return new HttpStatusCodeResult(400); 
    } 

Qui è la mia opinione

@using Common.Util 
@using Common.Util.Configuration 
@using CafData 
@model Occurrence 

<div class="box-form"> 
    @using (Ajax.BeginForm("Create", "Occurrence", 
     new AjaxOptions 
     { 
      OnSuccess = "OnSuccess()", 
      OnFailure = "OnFailure()" 
     })) 
    { 
     @Html.AntiForgeryToken() 
     @Html.ValidationSummary(true) 

@*Area*@ 

     <div class="row-fluid details-field"> 
      @(Html.Kendo().DropDownList() 
       .Name("areas") 
       .HtmlAttributes(new { style = "width:300px" }) 
       .OptionLabel("Selecione uma area...") 
       .DataTextField("Description") 
       .DataValueField("IdArea") 
       .DataSource(source => 
       { 
        source.Read(read => 
        { 
         read.Action("readAreasForDropDown", "Area"); 
        }); 
       }) 
     ) 


@*Occurrence type*@ 

      @(Html.Kendo().DropDownListFor(m => m.OccurrenceTypeId) 
       .Name("occurrencetype") 
       .HtmlAttributes(new { style = "width:300px" }) 
       .OptionLabel("Select a occurrence type...") 
       .DataTextField("Description") 
       .DataValueField("OccurrenceTypeId") 
       .DataSource(source => 
       { 
        source.Read(read => 
        { 
         read.Action("lerOccurrenceTypeForDropDown",      
         "OccurrenceType").Data("filterArea"). 
         Type(HttpVerbs.Post); 
        }) 
        .ServerFiltering(true); 
       }) 
       .Enable(false) 
       .AutoBind(false) 
       .CascadeFrom("areas") 
     ) 

     <script> 
      function filterArea() { 
       return { 
         id: $("#areas").val() 
       }; 
      } 
     </script> 

     <button class="k-button">Save</button> 

    } 

</div> 

@section Scripts { 
    @Scripts.Render("~/bundles/jqueryval") 
} 

Siamo spiacenti per il cattivo inglese!

+0

risolto, ma posso solo postare la risposta dopo 8 ore a causa della reputazione –

+0

favore aggiorna la risposta –

risposta

17

Il problema era il nome del menu a discesa, deve essere lo stesso nome della proprietà del modello che si desidera associare.

Esempio:

@(Html.Kendo().DropDownListFor(m => m.OccurrenceTypeId) 
      .Name("OccurrenceTypeId") 

Alternativa:

La proprietà nome non è effettivamente necessario quando si utilizza DropDownListFor. Quindi, solo la rimozione di questa linea dovrebbe funzionare così:

.Name("occurrencetype") 
+5

non credo è necessario specificare il nome ' 'quando si usa' DropDownListFor <> ' –

+1

hai ragione, il vero problema era il Nome diverso della proprietà specificata in DropDownListFor <>, se avessi eliminato il. Nome probabilmente avrebbe funzionato. –

+0

Vorrei poter alzare il voto un centinaio di volte. Mi hai appena salvato ore di lavoro. – Winks