我对Web开发很陌生,我遇到了以下我不太明白的问题。使用 Visual Basic 在 VS2010 中工作。
我有一个页面(aspx),它有一个gridview,它有几列,包括一个带有复选框的列和一个“action”列,它有一个空的、隐藏的下拉列表开始(每一行都有这个)。
每当用户勾选一个框时,我都会使用 AJAX 调用从服务器检索一些值(这是我第一次尝试 AJAX :-)),并使用这些值填充所选行的“操作”列中的下拉列表。到目前为止,一切都很好。
然后,用户可以在下拉列表中进行选择,然后按下按钮(上传),然后进行回发以处理信息。
但是,在后面的代码中,我无法检索下拉列表中添加的项目(更不用说选择的值了)。我可以检索下拉列表,但它没有项目。
谷歌搜索了一段时间后,我意识到当表单发布到服务器时,客户端的更改并没有持续存在,我理解这一点——但这似乎也很奇怪。下拉菜单是在页面创建时创建的,为什么不存储javascipt添加的项目呢?特别是因为我发现一些变通方法使用隐藏字段来存储添加的项目或选定值。如果我可以将它们存储在隐藏字段中,为什么我不能将它们存储在实际的下拉列表中?
我显然不明白网站是如何工作的......但这意味着,在最初加载页面后,您可以更改下拉列表和列表框等中的值,但这些永远不会在服务器端可用?
编辑:一些代码;第一个 javascript-snippet 我如何添加通过 AJAX 调用检索到的不同值:
var drop = row.findElement("ddlAction"); //find the dropdownelement in the DOM
for (j = 0; j < dropdownitems.length; j++) { //add all the options from xml
option = document.createElement("option");
option.text = dropdownitems[i].getAttribute("text");
option.value = dropdownitems[i].getAttribute("value");
drop.add(option, null);
}
这很好用,下拉列表已填满,我可以选择。但是当页面发布时,我在服务器代码中执行以下操作:
Dim SelCount As Integer = LocalFilesGrid.SelectedItems.Count
If SelCount >= 0 Then
For Each dataItem In LocalFilesGrid.SelectedItems
Dim drop As DropDownList
drop = dataItem.FindControl("ddlAction")
If drop.Items.Count = 0 Then 'always zero
MsgBox("Nope")
End If
Next
End If
我希望能够遍历网格的选定行,获取相应的下拉列表和选定值。