我试图将select2列表中的值绑定到剃刀后mvc上的模型

时间:2019-02-05 21:48:23

标签: asp.net-mvc razor .net-core jquery-select2

我目前在.net-core剃刀页面上具有模型的编辑视图。下面的代码根据选择select2下拉列表中为PartId传递的值的方式工作。我的问题是,当我尝试再次在表单上发布而不触摸part元素时,验证抱怨它未设置。我已经看到它传递给控制器​​上的操作不正确时设置为0。

表单中的HTML

<div class="form-group">
    <label class="form-label">Part</label>
    <select name="PartId" id="selectpicker1" class="form-control" data-style="btn-default">
       <option></option>
    </select>
<span asp-validation-for="PartId" class="text-danger"></span>
</div>

JS

$('#selectpicker1').select2({
     placeholder: 'Select a part',
     data: JSON.parse('@Html.Raw(Json.Serialize(Model.PartsList))'),

     initSelection: function (element, callback) {
     var data= { id: @Model.PartId.ToString(), text: '@Model.PartsList.Where(x=> x.Id == Model.PartId.ToString() ).First().Text'};
     callback(data);
     }
});

如果我重新选择相同的项目,则它会正确绑定并发送到控制器。由于此功能正常运行,因此我没有提供操作或表单的其余部分。

1 个答案:

答案 0 :(得分:0)

我通过以下方法解决了此问题:

 initSelection: function (element, callback) {
     var data= { id: @Model.PartId.ToString(), text: '@Model.PartsList.Where(x=> x.Id == Model.PartId.ToString() ).First().Text'};
     callback(data);
 }

并使用以下命令(当前它选择选项99,但我可以用模型中的PartId替换它。

 $('#selectpicker1').val('99');
 $('#selectpicker1').trigger('change');
相关问题