2013-10-11 80 views
0

我对Web开发很新,而且我遇到了以下问题,我不太明白。在VS2010中使用visual basic工作。用javascript添加项目到下拉列表并坚持回发

我有一个页面(aspx),它有一个gridview,它有几列,包括一个带有tickbox和一列'action'的列,它有一个空的,隐藏的下拉列表(每行都有这个)。

每当用户勾选一个框时,我会通过AJAX调用(这是我第一次尝试AJAX :-))从服务器检索一些值,并使用这些值在“操作”列中填充下拉列表选定的行。到现在为止还挺好。

然后,用户可以在下拉列表中进行选择,然后按下按钮(上传),然后执行回发以处理信息。

但是,在后面的代码中,我无法检索下拉列表中添加的项目(更不用说选定的值)。我可以检索下拉列表,但它没有任何项目。

谷歌搜索了一段时间后,我意识到客户端的变化不会在表单发布到服务器时持久化,我知道 - 但它也似乎很奇怪。下拉菜单是在创建页面时创建的,为什么它不存储javascipt添加的项目?特别是因为我发现一些解决方法使用隐藏的字段来存储添加的项目或selectedvalue。如果我可以将它们存储在隐藏字段中,为什么我不能将它们存储在实际的下拉列表中?

我很明显不理解网站是如何工作的......但这意味着,在页面初始加载后,您可以更改下拉列表框和列表框等的值,但这些将永远不可用的服务器端?

编辑:一些代码;第一个JavaScript的代码片段我如何通过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 

我希望能够遍历网格的选定行,得到相应的下拉列表和的SelectedValue。

+0

SOF的人会更有兴趣看到'code please' :) –

回答

2

当你混合使用这些不同的技术时,你最终会遇到像这样的麻烦。你要做的是AjaxASP.NET。选择一个然后使用它。如果您选择ASP.NET而不是AJAX致电使用UpdatePanel这将简化您的生活。

如果你想Ajax填满你的自我,然后处理按钮点击并通过ajax提交请求,而不是回发。

您能够检索下拉菜单但不是项目的原因是您必须在aspx中声明下拉菜单,但这些项目是在客户端添加的,因此服务器对项目没有任何了解。

原因是ASP.NET使用视图状态,你不能搞乱视图状态。因此,您可以将数据添加到隐藏字段并在服务器上读取它们,但不能将数据写入视图状态。

最好的方法是使用ASP.NETUpdatePanels。如果你混在一起,那么你将不得不在每一步都继续做某种伎俩。如果你想更好地使用自己的Ajax东西,可以使用MVCRazor(而不是使用aspx的mvc),因为它是用于这种用途的。

+0

嗯..我会研究UpdatePanel。 –

相关问题