Значение, выбранное из раскрывающегося списка, равно нулю на странице модели

#.net #forms #asp.net-core

Вопрос:

Я пытаюсь создать форму в Razor Pages .NETCore, где будут происходить следующие события:

  • Пользователь выбирает дату в окне выбора даты
  • На основе этой даты некоторые значения будут заполнены выпадающим списком
  • Пользователь выбирает значение из выпадающего списка, и это значение заносится в базу данных

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

В html

 @section Scripts {
<script>
    $("#SelectDate").on("change", function () {
            var myDate = $(this).val();

            $("#select").empty();
            $("#select").append("<option value=''>select </option>");
            $.getJSON(`?handler=Dateamp;date=${myDate}`, (data) => {
                $.each(data, function (i, item) {
                    $("#select").append("<option value='"    "'>"   item.value   "</option>");
                });
            });
        });
</script>
}

<form method="post">
<div class="form-group">
       <label asp-for="SelectDate" class="control-label"></label>
       <input asp-for="SelectDate" class="form-control" />
       <span asp-validation-for="SelectDate" class="text-danger"></span>
 </div>

<select id="select" asp-for="SelectedValue"></select>

<div class="form-group button-position col-md4">
      <input type="submit" name="Submit" value="Submit" />
</div>
</form>
 

В моей модели

 [BindProperty]
[DataType(DataType.Date)]
public DateTime SelectDate { get; set; }

[BindProperty(SupportsGet = true)]
public string SelectedValue { get;set; }

public IActionResult OnPost()
{
    if (!ModelState.IsValid)
    {
        return Page();
    }

    //here SelectedValue is null
    Debug.WriteLine(SelectedValue)    
           
    return Redirect(Url.Page(indexPage));
}


//method that puts the values on the dropdown 
public IActionResult OnGetDate(DateTime date)
{
    //Here I set the values that are going to the dropdown (these are string values)

      foreach (var h in myValues)
      {
             model.Add(new Values
             {
                  Value = h
              });
      }

      return new JsonResult(model);
}
 

Ответ №1:

Просто измените свой код, например

 $("#select").append(""<option value='"   item.value   "'>"    "'>"   item.value   "</option>");