Получение значения из DataTextField комбо Kendo MVC и присвоение его модели просмотра

Я реализую элемент управления полем со списком MVC kendo в моем приложении MVC. Поле со списком kendo содержит свойство модели, привязанное к свойству value и text соответственно. Свойство text содержит объединенное свойство модели с именем CompanyCodeCompany. Мне в основном нужно извлечь балансовую единицу и назначить ее свойству балансовой единицы в модели просмотра, поскольку мне нужно это значение при сохранении в базе данных. Обратите внимание, что мне нужен как код страны, так и код компании. В настоящее время поле значения поля со списком привязано к CountryCode. В настоящее время поле со списком заполняется с использованием модели представления SalesOrganisation, а основная форма публикует данные с использованием модели представления newrequest. Я попробовал свойство CompanyCodeCompany в новой модели просмотра запроса. Но, похоже, это тоже работает. Я понимаю, что этот фрагмент кода в combo @ (Html.Kendo (). ComboBoxFor (model => model.CountryCode) будет связывать только код страны. Идеальным способом было бы получить компанию значение кода от сбытовой организации и присвоить его новой модели просмотра запроса прямо в razor.

Я не уверен, какой подход использовать для получения значения кода компании.

<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>

Модель представления сбытовой организации

 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; }
      }

person Tom    schedule 13.04.2017    source источник


Ответы (1)


Подобно вашему другому вопросу: в основном, обработайте событие изменения в поле со списком и установите значение балансовой единицы. Итак, сначала добавьте 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/

person Steve Greene    schedule 13.04.2017