我目前在.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);
}
});
如果我重新选择相同的项目,则它会正确绑定并发送到控制器。由于此功能正常运行,因此我没有提供操作或表单的其余部分。
答案 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');