0

Ich habe die Cascading-Funktion von Kendo Drop-Down implementiert. Beim Versuch, die Informationen zu speichern, kann ich den Wert der Kombination in meinem Ansichtsmodell nicht ermitteln. Wenn ich das name-Attribut kommentiere, erhalte ich den Wert, aber ich brauche das name-Attribut, damit die kaskadierende Funktion funktioniert. Ich habe eine Problemumgehung mit jquery versucht, um den Modellwert festzulegen, aber Fehler zu erhalten. Könnte mir jemand sagen, wie ich dieses Problem beheben kann?Der Wert des Combos konnte nicht auf das Viewmodel gesetzt werden.

Vertriebsorganisation Combo

<div class="form-group"> 
      @Html.LabelFor(model => model.Company, htmlAttributes: new { @class = "control-label col-md-4" }) 
      <div class="col-md-6"> 
       <div class="editor-field"> 
        @(Html.Kendo().ComboBoxFor(model => model.CountryCode) 
    .Name("SalesOrganisation") 
    .HtmlAttributes(new { style = "width:100%" }) 
    .DataTextField("CompanyCodeCompany") 
    .DataValueField("CountryCode") 
    .Filter("contains") 
    .MinLength(3) 
    .DataSource(dataSource => dataSource 
    .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post)) 
    .ServerFiltering(true) 
    ) 

        ) 
       </div> 
       @Html.ValidationMessageFor(model => model.Company, "", new { @class = "text-danger" }) 
      </div> 
     </div> 

Verkaufsbüro Combo

<div class="form-group"> 
        @Html.LabelFor(model => model.SalesOffice, htmlAttributes: new { @class = "control-label col-md-4" }) 
        <div class="col-md-6"> 
         <div class="editor-field"> 
          @(Html.Kendo().ComboBoxFor(model => model.SalesOfficeID) 
      // .Name("SalesOffice") 
      .HtmlAttributes(new { style = "width:100%" }) 
      .DataTextField("SalesOffice") 
      .DataValueField("SalesOfficeID") 
      .AutoBind(false) 
      .Value("") 
      .DataSource(dataSource => dataSource 
       .Read(read => 
       { 
        read.Action("RequestHeader_SalesOffice", "Request") 
         .Type(HttpVerbs.Post) 
         .Data("GetFilterOption"); 
       }).ServerFiltering(true) 
       ).CascadeFrom("SalesOrganisation").Filter("contains") 

          ) 
         </div> 
         @Html.ValidationMessageFor(model => model.SalesOffice, "", new { @class = "text-danger" }) 
        </div> 
       </div> 

Javascript für die Kaskadierung Funktion arbeiten

function GetFilterOption() { 

     return { 
      id: $('#SalesOrganisation').val() 
     } 

    } 

Javascript - Der Versuch, das Modell zu setzen, die

function GetFilterOption() { 
     var countryCode = $('#SalesOrganisation').val(); 
     var model = $('#SalesOrganisation').data('kendoComboBox'); 
     model.value = countryCode; 
     return id = countryCode; 
    } 

Antwort

0

nicht funktioniert Wenn Sie .ComboBoxFor() verwenden, sollten Sie() nicht .Name verwenden.

Wenn Sie .ComboBoxFor (m => m.FieldName), dann die id/name-Attribut wird von Kendo-Implementierung der Razor Helfer und Matches der Name Ihres Modellfeld auf „Feldname“ gesetzt werden.

Wenn Sie dann .Name („SomeOtherFieldName“) verwenden, können Sie das Attribut id/Namen ändern, „SomeOtherFieldName“ und es nicht mehr passt den Feldnamen des Modells, das, warum Sie nicht mehr den Wert erhalten, ist .

Was Sie tun möchten, ist nicht Verwendung .Name() und die .CascadeFrom() entsprechend einrichten, dh

@(Html.Kendo().ComboBoxFor(model => model.CountryCode) 
.... 

@(Html.Kendo().ComboBoxFor(model => model.SalesOfficeID) 
    .CascadeFrom("CountryCode") 

function GetFilterOption() { 
    return { 
     id: $('#CountryCode').val() 
    } 
} 
+0

Ja, das funktioniert Aber ich habe eine andere Combo, die auf dieser Combo basierte Filter ' Textfeld. Was mache ich dort? Funktion GetFilterOption1() { Rückgabe {ID: $ ('[Name = "SalesOrganisation"]'). Daten ("KendoComboBox"). Text(). Split ('-') [0] } } – Tom

+0

Ich habe die gleiche Zuordnung der Ländercode für die andere Filteroption und es scheint zu funktionieren. Ist das der richtige Weg? – Tom

+0

Ja, Sie müssen auf Ihre Eingaben/Elemente/Widgets mit einem einzigen und konsistenten Namen verweisen. Dies ist der Name Ihres ViewModel-Feldes, wenn Sie die XXXXFor() Rasierklingen verwenden. –

Verwandte Themen