Динамическое заполнение полей модели в представлении выбора выпадающего списка в asp.net mvc - PullRequest
0 голосов
/ 12 апреля 2019

У меня есть представление в приложении ASP.NET MVC, с раскрывающимся списком и другими текстовыми полями.Выпадающий список заполняется именами файлов из определенного каталога.Итак, при выборе определенного имени файла из выпадающего списка, я хочу заполнить другие текстовые поля содержимым выбранного файла.О чтении файла уже позаботились.

Я борюсь с заполнением текстовых полей после выбора имени файла из выпадающего списка.

Как я могу это сделать?

<div class="col-lg-4">
    @Html.DropDownList("cardProgram", null, "--Select--", new { @class = "form-control input-group-lg" })
</div>

Ответы [ 2 ]

0 голосов
/ 18 апреля 2019

Я наконец-то заработал.См. Ниже: HTML-код:

@Html.LabelFor(m => m.cardProgram, new { @class = "col-lg-2" })
<div class="col-lg-4">
     @Html.DropDownListFor(m => m.cardProgram, null, "--Select Card Profile--", new
                           {
                               @class = "col-lg-4 form-control input-group-lg",
                               @onchange = "BindProfile()"

                           })
</div>

AJAX-код:

    <script>
        function BindProfile() {
            var selectedProfile = $('#cardProgram').val();
            $.ajax({
                url: '/CardCreation/BindProfile',
                type: "GET",
                dataType: "JSON",
                data: { cardProgram: selectedProfile },
                success: function (profile) {
                    $("#sBin").val(profile.card.bin)
                    $("#IsChip").val(profile.card.chip)

                    $("#IsBatches").val(profile.output.splitBatches)
                    $("#BatchSize").val(profile.output.batchSize)
                    $("#SplitPostcard").val(profile.output.splitPostcardFile)

                    $("#SubCat").val(profile.batchDetails.subcategory)
                    $("#UserCodeIncrement").val(profile.batchDetails.usercodeIncrement)
                    $("#ExpiryDate").val(profile.batchDetails.expiryWindowMM)

                    $("#Bureau").val(profile.chipDetails.bureau)
                    $("#BatchType").val(profile.chipDetails.batchType)
                    $("#EffectiveDate").val(profile.chipDetails.effectiveDateOffsetMM)

                    $("#ServiceCode").val(profile.emvApplications[0].serviceRestrictionCode)



                }
            });
        }
    </script>

Код контроллера:


public async Task<ActionResult> BindProfile(string cardProgram)
        {
            var profile = new Profile();
            using (var client = new HttpClient())
            {
                client.BaseAddress = new Uri("http://localhost:59066/");
                client.DefaultRequestHeaders.Accept.Clear();
                client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
                ViewBag.country = "";
                HttpResponseMessage response = await client.GetAsync(client.BaseAddress + "api/CardCreation/GetSelectedCardProfile?selectedProfile=" + cardProgram);
                if (response.IsSuccessStatusCode)
                {
                    //profile = response.Content.ReadAsAsync<Profile>().Result;
                    profile = JsonConvert.DeserializeObject<Profile>(response.Content.ReadAsStringAsync().Result);
                    return Json(profile, JsonRequestBehavior.AllowGet);
                }
                else
                {
                    return Json(profile, JsonRequestBehavior.AllowGet); ;
                }
            }
        }
0 голосов
/ 14 апреля 2019

Ajax-код:

$(document).ready(function () {
        $("#FileDDL_ID").change(function () {
            var file = $('#FileDDL_ID option:selected').text();

            $.ajax({
                url: "@Url.Action("YourAction", "Controller")",
                type: "POST",
                dataType: "json",
                data: { filename: file }, //pass file as parameter to controller
                async: false,

                error: function () {
                },

                //assuming your data property is called fileDetail1
                success: function (data) {
                    if (Object.keys(data).length > 0) {
                        $('#fileDetailtxtBox1').val(data[0].fileDetail1);                          
                        $('#fileDetailtxtBox2').val(data[0].fileDetail2);
                    }
                }
            });
        });
    });

Код контроллера:

[HttpPost]
public JsonResult YourAction(string filename)
{
   using (var db = new DataContext())
   {
      //use filename as condition
      var details = db.YourDbset.Condition.ToList();
      return Json(details, JsonRequestBehavior.AllowGet);
   }
}

Надеюсь, это понятно, я попытался назвать переменные в соответствии с вашим вопросом.Таким образом, в основном вы передаете выбранное значение из раскрывающегося списка в действие Controller и получаете обратно связанные данные и заполняете поля с помощью jQuery Ajax.

...