4

我有一个带有三个隐藏字段的 ASP.NET 页面。(如果我能让它工作,只有一个会做。只是表明我已经尝试了几件事。)

<input type="hidden" id="hiddenSkillId1" runat="server" />
<input type="hidden" id="hiddenSkillId2" />
<asp:HiddenField ID="hiddenSkillId3" runat="server"/>    

我还有一个由 AJAXControlToolKit.AutoCompleteExtender.OnClientItemSelected 事件调用的 JavaScript 函数:

<script type="text/javascript">
function SkillPartialMatchSelected(source, eventArgs ) {
    document.getElementById("ctl00_Content_hiddenSkillId1").Value = eventArgs.get_value();
    document.getElementById("hiddenSkillId2").Value = eventArgs.get_value();
    document.getElementById("ctl00_Content_hiddenSkillId3").Value = eventArgs.get_value();
}
</script>

使用断点并检查值,我已经确认在客户端设置了 vales。

最后,我为连接到 LinkBut​​ton OnClick 事件的页面提供了 C# 代码。

protected void AddSkillToProspect(object sender, EventArgs e)
{
   string selectedKey1 = Request.Form[hiddenSkillId1.ClientID];
   string selectedKey2 = Request.Form["hiddenSkillId2"];
   string selectedKey3 = Request.Form[hiddenSkillId3.ClientID];
   string selectedItem = SkillNameBox.Text.Trim();   
   ...
}

所有三个 selectedKey 值均为 null,但 ASP.NET 文本编辑中的 selectedItem 值具有值。

从我读过的内容来看,其中一个应该可以工作。我错过了什么吗?我该怎么做才能将客户端的 JavaScript 函数的值返回到服务器端?

4

2 回答 2

6

该问题与 JavaScript 中的大小写敏感有关。尽管您已经为这些字段设置了 .Value,但这与 .value 不同。更改您的 javascript 以设置 .value,您应该已准备就绪。

<script type="text/javascript">
function SkillPartialMatchSelected(source, eventArgs )     
{
    document.getElementById("ctl00_Content_hiddenSkillId1").value = eventArgs.get_value();
    document.getElementById("hiddenSkillId2").value = eventArgs.get_value();
    document.getElementById("ctl00_Content_hiddenSkillId3").value = eventArgs.get_value(); 
} 
</script> 
于 2012-07-26T20:05:29.283 回答
3

您的隐藏控件runat=server上有它们意味着它们是服务器控件,您可以通过它们背后的代码中的 id 访问它们

这种方式的区别将hiddenSkillId1是一个 htmlserver 控件,hiddenSkillId2普通的 html 控件,而这个hiddenSkillId3是一个 asp.net 控件

string selectedKey1 = hiddenSkillId1.Value;
string selectedKey3 = hiddenSkillId3.Text;
string selectedKey2 = Request.Form[hiddenSkillId2];

所以请尝试以这种方式使用它

于 2012-07-26T17:44:03.987 回答