选择标签助手选择的值未在视图中呈现

时间:2019-04-02 11:07:29

标签: asp.net-mvc select entity-framework-core razor-pages asp.net-core-tag-helpers

我的选择标签助手需要帮助。

我有一个带有选择2控件的asp.net MVC视图,如下所示:

<div class="col-md-3">
     <div class="form-group">
         <label asp-for="NumberingType.Type" class="control-label" data-toggle="popover" data-placement="right" data-trigger="click" title="Field Help" data-content="Select the Numbering Scheme type that you want to create">Number Scheme Type *</label>
               <select asp-for="NumberingType.TenantNumberingTypeId" asp-items="Model.NumberingType.NumberingTypeList" class="form-control select2">
                    <option></option>
                </select>
          <span asp-validation-for="NumberingType.TenantNumberingTypeId" class="text-danger"></span>
     </div>
</div>

我正在初始化select2,如下所示:

<script type="text/javascript">
    $(document).ready(function () {

        $(".select2").select2({
            placeholder: "Select",
            theme: 'bootstrap',
            allowClear: true
        });
    });
</script>

我正在加载正确的脚本:

<link href="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/css/select2.min.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.5/js/select2.full.min.js"></script>

在我的控制器中,按如下所示填充选择2:

public async Task<IActionResult> EditNumberScheme(int numberId)
{
   var vm = new NumberingViewModel();

   try
   {
      vm = await GetNumberingViewModel(numberId);
      vm = UpdatedBaseViewModel<NumberingViewModel>(vm);
   }
   catch (Exception e)
   {
       await ErrorHandler.HandleException(e);

       vm.MessageType = BaseViewModel.UserMessageType.Error;
    }
    return View(vm);
}

private async Task<NumberingViewModel> GetNumberingViewModel(int numberId)
{
    var number = await DataGet.GetTenantNumberScheme(numberId);

     NumberingViewModel model = new NumberingViewModel
     {
          Numbering = number
     };

     model.NumberingType = new TenantNumberingTypeModel();
     model.NumberingType.NumberingTypeList = DataGet.GetTenantNumberingTypes().Result
                    .Select(x => new SelectListItem { Value = x.TenantNumberingTypeId.ToString(), Text = x.Type, Selected = (x.TenantNumberingTypeId == number.TenantNumberingTypeId) })
                    .ToList();

       model.Owner = await DataGet.GetTenantOwner(UserInfo.Instance.Tenant.TenantId);

       return model;
}

select2值已成功从数据库加载,并且所选值显示在控制器中。

在视图中的select处放置断点时,很明显在NumberingTypeList中将所选值设置为true。

Model.NumberingType.NumberTypeList = Count = 4
[1] = {Microsoft.AspNetCore.Mvc.Rendering.SelectListItem}
Disabled = false
Group = null
Selected = true
Text = "Credit Note"
Value = "2"

但是,所选值未在视图中呈现。

<select class="form-control select2 select2-hidden-accessible" data-val="true" data-val-required="The TenantNumberingTypeId field is required." id="NumberingType_TenantNumberingTypeId" name="NumberingType.TenantNumberingTypeId" tabindex="-1" aria-hidden="true">
<option></option>
<option value="1">Invoice</option>
<option value="2">Credit Note</option>
<option value="3">Order</option>
<option value="4">Deposit</option>
</select>

任何帮助将不胜感激

谢谢

2 个答案:

答案 0 :(得分:0)

这是可见性的示例,您必须使用“ select2.full.min.js”。

答案 1 :(得分:0)

通过遵循本教程https://www.learnrazorpages.com/razor-pages/tag-helpers/select-tag-helper

,我设法使此工作正常进行

似乎该错误是由asp-for属性的绑定引起的。当我在控制器中明确设置所选项目时:

model.NumberType = new TenantNumberingTypeModel();
model.NumberType.NumberSchemeList = DataGet.GetTenantNumberingTypes().Result
    .Select(x => new SelectListItem { Value = x.TenantNumberingTypeId.ToString(), Text = x.Type })
    .ToList();

model.NumberingType.TenantNumberingTypeId = number.TenantNumberingTypeId;

数字是从数据库中检索到的对象

然后它可以正常工作,并且asp项自动选择由asp-for属性表示的值。

<select class="form-control select2 select2-hidden-accessible" data-val="true" data-val-required="Please select a type" id="NumberType_NumberTypeId" name="NumberType.NumberTypeId" tabindex="-1" aria-hidden="true">
<option></option>
<option value="1">Invoice</option>
<option selected="selected" value="2">Credit Note</option>
<option value="3">Order</option>
<option value="4">Deposit</option>
</select>

希望这对某人有帮助