0

我对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

我希望能够遍历网格的选定行,获取相应的下拉列表和选定值。

4

1 回答 1

1

When you mix such different technologies you will end up in troubles like this. What you are trying to do is bit of Ajax and a bit of ASP.NET. Choose one and then use it. If you choose ASP.NET instead of AJAX call use UpdatePanel which will simplify your life.

If you want to Ajax stuff your self, then handle the button click and submit the request by ajax rather than postback.

The reason why you are able to retrieve the drop down but not the items because you must have declared the drop down in aspx but the items were added on client side, so server has no knowledge about the items.

The reason is ASP.NET uses view state and you can not mess with view state. So you can add the data to hidden field and read them at server but you can not write the data in view state.

The best way is use ASP.NET with UpdatePanels. If you mix, then you will have to keep doing some sort of trick at every step. If you want to do your own Ajax stuff better use MVC and Razor(not mvc with aspx) because it is made for such use.

于 2013-10-11T14:39:03.507 回答