Select 字段未显示下拉值
Select field is not showing the dropdown values
任何人都可以帮助我,这两天我被困住了。我是 Knockoutjs / viewmodel 的新手。我试图了解如何将数据绑定到下拉列表。下拉值需要通过 API 从数据库中提取,具体取决于在另一个字段中输入的值(这基本上是 API 到 return 下拉值的输入参数)。 API到return的数据如下
[HttpPost]
public JsonResult GetGInfo(string sNumber)
{
try
{
DSRepository dsr = new DSRepository();
List<String> gTypeList = dsr.GetDDInfo(sNumber);
if (gTypeList != null)
return Json(gTypeList);
else
return null;
}
catch (Exception e)
{
return null;
}}
下面是两个字段
// this value should be passed in to the API to retrieve the dropdown list
self.sNumber= ko.observable().extend({ required: { params: true, message: "Required!" } });
//Dropdown list field
self.gType= ko.observable().extend({ required: true });
//function for making a call to the API
self.getGTypes = function (data, event) {
$.ajax({
url: '/REQ/GetGInfo',
type: 'POST',
data: {
sNumber: self.sNumber()
},
success: function (response) {
if (response.length < 1)
console.log("Record retrieved successfully");
},
error: function (errorThrown) {
console.log("Error retrieving the record");
}
})
};
而UI如下
<div class="form-group required">
<label for="SNumber" class="control-label">SNumber:</label>
<input type="number" id="SNumber" class="form-control" data-bind="event: {change: getGTypes}, value: sNumber">
</div>
<div class="form-group required">
<label for="GType" class="control-label">GType</label>
<select id="GType" name="GType" class="form-control" data-bind="options: getGTypes, value: gType, optionsCaption: 'Select'"></select>
</div>
</div>
因此,当在 SNumber 字段中输入值时,调用 getGenoTypes
我看到数据是 return 通过调试从 API 编辑的,对于数字我我看到下面的数据 gTypeList
是 return 从 API
返回的
但在下拉列表中我什么也没看到
请帮我看看我完全卡住了这里缺少什么
您实际上需要 保存 您从视图模型上的 API 收到的下拉值。您不能只执行 API 调用并期望 Knockout 神奇地理解它需要使用(异步)响应数据来填充 select 列表。
所以基本上,你需要做这样的事情:
// this value should be passed in to the API to retrieve the dropdown list
self.sNumber = ko.observable().extend({ required: { params: true, message: "Required!" } });
//Dropdown list field
self.gType = ko.observable().extend({ required: true });
// Dropdown list values
self.gTypes = ko.observableArray();
//function for making a call to the API
self.getGTypes = function (data, event) {
$.ajax({
url: '/REQ/GetGInfo',
type: 'POST',
data: {
sNumber: self.sNumber()
},
success: function (response) {
self.gTypes(response);
},
error: function (errorThrown) {
console.log("Error retrieving the record");
}
})
};
<select id="GType" name="GType" class="form-control" data-bind="
options: gTypes,
value: gType,
optionsCaption: 'Select'"></select>
请注意,我不知道 response
是什么样子,所以这可能不是 100% 正确,但我希望你能理解它。
任何人都可以帮助我,这两天我被困住了。我是 Knockoutjs / viewmodel 的新手。我试图了解如何将数据绑定到下拉列表。下拉值需要通过 API 从数据库中提取,具体取决于在另一个字段中输入的值(这基本上是 API 到 return 下拉值的输入参数)。 API到return的数据如下
[HttpPost]
public JsonResult GetGInfo(string sNumber)
{
try
{
DSRepository dsr = new DSRepository();
List<String> gTypeList = dsr.GetDDInfo(sNumber);
if (gTypeList != null)
return Json(gTypeList);
else
return null;
}
catch (Exception e)
{
return null;
}}
下面是两个字段
// this value should be passed in to the API to retrieve the dropdown list
self.sNumber= ko.observable().extend({ required: { params: true, message: "Required!" } });
//Dropdown list field
self.gType= ko.observable().extend({ required: true });
//function for making a call to the API
self.getGTypes = function (data, event) {
$.ajax({
url: '/REQ/GetGInfo',
type: 'POST',
data: {
sNumber: self.sNumber()
},
success: function (response) {
if (response.length < 1)
console.log("Record retrieved successfully");
},
error: function (errorThrown) {
console.log("Error retrieving the record");
}
})
};
而UI如下
<div class="form-group required">
<label for="SNumber" class="control-label">SNumber:</label>
<input type="number" id="SNumber" class="form-control" data-bind="event: {change: getGTypes}, value: sNumber">
</div>
<div class="form-group required">
<label for="GType" class="control-label">GType</label>
<select id="GType" name="GType" class="form-control" data-bind="options: getGTypes, value: gType, optionsCaption: 'Select'"></select>
</div>
</div>
因此,当在 SNumber 字段中输入值时,调用 getGenoTypes
我看到数据是 return 通过调试从 API 编辑的,对于数字我我看到下面的数据 gTypeList
是 return 从 API
但在下拉列表中我什么也没看到
请帮我看看我完全卡住了这里缺少什么
您实际上需要 保存 您从视图模型上的 API 收到的下拉值。您不能只执行 API 调用并期望 Knockout 神奇地理解它需要使用(异步)响应数据来填充 select 列表。
所以基本上,你需要做这样的事情:
// this value should be passed in to the API to retrieve the dropdown list
self.sNumber = ko.observable().extend({ required: { params: true, message: "Required!" } });
//Dropdown list field
self.gType = ko.observable().extend({ required: true });
// Dropdown list values
self.gTypes = ko.observableArray();
//function for making a call to the API
self.getGTypes = function (data, event) {
$.ajax({
url: '/REQ/GetGInfo',
type: 'POST',
data: {
sNumber: self.sNumber()
},
success: function (response) {
self.gTypes(response);
},
error: function (errorThrown) {
console.log("Error retrieving the record");
}
})
};
<select id="GType" name="GType" class="form-control" data-bind="
options: gTypes,
value: gType,
optionsCaption: 'Select'"></select>
请注意,我不知道 response
是什么样子,所以这可能不是 100% 正确,但我希望你能理解它。