2015-10-21 3 views
0

я сделал обширный поиск, чтобы получить некоторые рекомендации, у меня есть выпадающий список:asp.net MVC 5 Jquery каскадная раскрывающиеся заполнит текстовые поля

<div class="form-group-sm"> 
     @Html.LabelFor(model => model.CustomerId, htmlAttributes: new { @class = "control-label col-md-2" }) 
     <div class="col-md-10"> 
      @Html.DropDownListFor(model => model.CustomerId, new SelectList(ViewBag.CustomerList, "Value", "Text"), new { @class = "form-control", id = "CustomerId" }) 
      @*<input id="test" type="text" />*@ 
      @Html.ValidationMessageFor(model => model.CustomerId, "", new { @class = "text-danger" }) 
     </div> 
    </div> 

... что каскады в этот список:

<div class="form-group-sm"> 
    @Html.LabelFor(model => model.ShipToId, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     <select id="ShipToId" name="ShipToId" class="form-control"></select> 
     @Html.ValidationMessageFor(model => model.ShipToId, "", new { @class = "text-danger" }) 
    </div> 
</div> 

мне нужно взять ShipToId из вышеупомянутых и грейферных полей для следующих текстовых полей (я не буду перечислять их все здесь, но с некоторым руководством я могу понять, как заполнить Mulitple поля):

<div class="form-group-sm"> 
    @Html.LabelFor(model => model.Address1, htmlAttributes: new { @class = "control-label col-md-2" }) 
    <div class="col-md-10"> 
     @Html.EditorFor(model => model.Address1, new { htmlAttributes = new { @class = "form-control", id = "Address1" } }) 
     @Html.ValidationMessageFor(model => model.Address1, "", new { @class = "text-danger" }) 
    </div> 
</div> 

У меня есть следующий JQuery, который заполнит мои каскадные DropDownLists для CustomerId и ShipToId:

$(document).ready(function() { 
    $.getJSON('/Order/GetCustomerIds/' + $('#CustomerId option:selected').val(), function (data) { 
     var items = '<option value="">Select ShipTo</option>'; 
     $.each(data, function (i, ShipToIdSelectList) { 
      items += "<option value='" + ShipToIdSelectList.Value + "'>" + ShipToIdSelectList.Text + "</option>"; 
     }); 
     $("#ShipToId").html(items); 
     //$(function() { 
     // $("#State").val(StateCode); 
     //}) 
    }) 
}) 

$('#CustomerId').change(function() { 
    $.getJSON('/Order/GetCustomerIds/' + $('#CustomerId').val(), function (data) { 
     var items = '<option>Select ShipTo</option>'; 
     $.each(data, function (i, ShipToIdSelectList) { 
      items += "<option value='" + ShipToIdSelectList.Value + "'>" + ShipToIdSelectList.Text + "</option>"; 
     }); 
     $("#ShipToId").html(items); 
    }) 
}) 

каскад работает нормально. У меня также есть метод, который будет принимать ShipToId и вернуть список, включая поля, мне нужно:

var sta = (from o in db.Ord 
       join s in db.ShipTo on o.ShipToId equals s.ShipToId 
       where o.CompanyId == CurrentCompanyId && s.CustomerId == id 
       select new 
       { 
        ShipToId = o.ShipToId, 
        Name = s.Name, 
        Address1 = s.Address1, 
        Address2 = s.Address2, 
        Address3 = s.Address3, 
        Address4 = s.Address4, 
        City = s.City, 
        County = s.County, 
        Country = s.CountryCode, 
        State = s.StateCode, 
        PostalCode = s.PostalCode 

       }).Distinct().ToList(); 

Результат:

[0] = { ShipToId = "1~0", Name = "Big Head Productions", Address1 = null, Address2 = null, Address3 = null, Address4 = null, City = "Boonville", County = "...", Country = "US", State = "..." ... } 

Я имею информацию мне нужно, я просто не знаю, как использовать JQuery, чтобы заполнить правильные текстовые поля. Я не знаю, что это может быть проще с использованием такой структуры, как Angular или Knockout. Какие-либо предложения?

ответ

0

Похоже, вам нужно другое событие изменения для раскрытия #ShipToId.

on change call другой метод, который получает информацию о доставке. это также означает, что в первый раз вам не нужно будет возвращать всю информацию о доставке, просто информацию, необходимую для создания выпадающего списка. Поэтому, если у кого-то есть «Домашний» и «Рабочий» адрес, вы просто вернете идентификатор и описание, чтобы заполнить выпадающее меню, а затем используйте идентификатор, чтобы получить информацию о доставке.

Его до вас, если вы хотите, чтобы информация о доставке была заполнена при загрузке, как будто кажется, что вы делаете первые два спуска.

+0

Я думаю, что это правильно. Я буду отмечать ваш ответ как правильно, если это так, и если нет, я предоставлю свой ответ – MeddlingDeveloper