选择从JavaScript填充的控件返回空值

时间:2011-07-01 04:00:48

标签: javascript asp.net select postback

在我的ASP.NET应用程序中,我有一个服务器端HTML选择控件。

<select id="CompanyDropDown" runat="server" style="width:330px">
</select>

然后我在我的页面上有一个链接,它运行一个填充此控件的JavaScript函数,并且还选择“当前”项。我可以看到这是有效的,因为列表中包含所有项目,并且选择了正确的项目。

然而,当页面回复时,会回复按钮。

<asp:Button runat="server" ID="btnSaveCompany" Text="Save" 
    onclick="btnSaveCompany_Click" />

CompanyDropDown.Value为空,且不包含任何内容。关于如何在回发中看到所选值的任何建议?

(注意:我尝试使用ASP.NET DropDown控件,但是当控件具有在呈现页面后添加的项目时,它无法进行回发验证。)

3 个答案:

答案 0 :(得分:2)

由于使用JavaScript添加到列表中的项目不是viewstate的一部分,因此无法在服务器端检索它们。如果您只是尝试获取所选值,请在页面上放置服务器端隐藏字段,并在每次更改下拉列表时使用JavaScript设置其值:

jQuery脚本

$('#CompanyDropDown').change(function() {
    $('#inpSelectValue').val($(this).val());
});

隐藏字段标记

<input runat="server" id="inpSelectValue" clientidmode="static" type="hidden" />

隐藏字段的值将在回发后传送到服务器。请参阅它以检索所选项目的值。请务必在下拉列表中添加clientidmode="static",以便将控件的呈现ID设置为您在ASPX页面中指定的ID(即CompanyDropDown而不是parentContainer_CompanyDropDown):

<select id="CompanyDropDown" runat="server" style="width:330px"
    clientidmode="static" />

或者,您可以使用AJAX告诉服务器您要添加每个动态生成的列表项或更改选择。如果你需要维护一个项目列表以及选择哪个项目,我只会这样做。

答案 1 :(得分:1)

在JS中操作的值无法在服务器端检索,也不能在回发时保留。您可以将SelectedValue放在隐藏字段中。在页面回发中,您必须再次设置隐藏字段中保存的SelectedValue

答案 2 :(得分:1)

您可以使用Request.Form [CompanyDropDown.UniqueID]。这将没有隐藏的领域。