0

MVCアプリケーションでMVC剣道コンボボックスコントロールを実装しています。剣道コンボボックスコントロールには、それぞれvalueプロパティとtextプロパティにバインドされたモデルプロパティが含まれています。 textプロパティには、CompanyCodeCompanyという連結モデルプロパティが含まれています。私は基本的に会社のコードを抽出し、それをデータベースに保存しながらその値が必要なので、viewmodelの会社コードプロパティに割り当てる必要があります。国コードと会社コードの両方が必要です。現在、コンボボックスの値フィールドはCountryCodeにバインドされています。現在、コンボボックスはSalesOrganisation viewmodelを使用して作成され、メインフォームはnewrequest viewmodelを使用してデータをポストします。新しいリクエストviewmodelでCompanyCodeCompanyプロパティを試しました。でも、このコードはコンボ@(Html.Kendo()。ComboBoxFor(model => model.CountryCode)は、国コードだけをバインドすることになります。理想的な方法は、会社を取得することでしたsalesorganisationからコード値は、とのViewModel直接かみそりで新しい要求に割り当てます。剣道MVCコンボのDataTextFieldから値を取得し、それをビューモデルに割り当てる

私はわからないアプローチにcompanycode値を取得するために取る。

<div class="form-group"> 
       @Html.LabelFor(model => model.Company, htmlAttributes: new { @class = "control-label col-md-4" }) 
       <div class="col-md-8"> 
        <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) 
         .Value(@user.DefaultCountryCode) 
         .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> 

販売組織のViewModel

public class SalesOrganisationViewModel 
    { 
     public string CountryCode { get; set; } 

     public string CompanyCode { get; set; } 

     [Display(Name = "Sales Organisation")] 
     public string Company { get; set; } 


     public string CompanyCodeCompany 
     { 
      get 
      { 
       return CompanyCode + " - " + Company; 
      } 
     } 

    } 

NewRequestのViewModelあなたの他の質問と同様に

public class NewRequestViewModel 
    { 

     private string name; 

     [Display(Name = "Request Id")] 
     public int RequestID { get; set; } 
     public int CustomerMasterDataId { get; set; } 

     [Display(Name = "Customer Number")] 
     public int CustomerNumber { get; set; } 
     [Display(Name = "Customer Name")] 
     public string Name1 { get; set; } 
     [Display(Name = "Customer Group")] 
     public string CustomerGroup { get; set; } 

     public string CountryCode { get; set; } 
     public string CompanyCodeCompany { get; set; } 
     } 

答えて

0

:基本的には、コンボボックスに変更イベントを処理し、会社コードの値を設定します。だから、まず、あなたのビューにHiddenForを追加します。

@Html.HiddenFor(model => model.CompanyCode) 

は今すぐ変更イベントを処理:

@(Html.Kendo().ComboBoxFor(model => model.CountryCode) 
    .HtmlAttributes(new { style = "width:100%" }) 
    .DataTextField("CompanyCodeCompany") 
    .DataValueField("CountryCode") 
    .Filter("contains") 
    .MinLength(3) 
    .Value(@user.DefaultCountryCode) 
    .Events(e => e.Change(onComboChange)) 
    .DataSource(dataSource => dataSource 
    .Read(read => read.Action("RequestHeader_SalesOrganisation", "Request").Type(HttpVerbs.Post)) 
    .ServerFiltering(true) 
    ) 

その後、データ項目にアクセスし、値を設定します。

@section scripts 
{ 
    <script type="text/javascript"> 
     function onComboChange(e) { 
      var dataItem = e.sender.dataItem(); 

      if (dataItem) { 
       $("#CompanyCode").val(dataItem.CompanyCode); 
      }; 
     }; 

    </script> 
} 

今、両方の国コードを会社コードは転記する必要があります。ここでは、バインディング部分の動作のサンプルを示します。http://jsfiddle.net/sg53719/74LwhebL/1/

関連する問題