我们有一个带有隐藏字段的 ASP 页面。此字段存储从数据库中删除的选定值:
<asp:HiddenField ID="TargetField" runat="server" />
同一页面会生成一个弹出窗口,其中包含一个删除按钮 - 单击此按钮“设置”此字段并触发服务器代码:
<asp:Button ID="ButtonDelete" runat="server" Text="Delete" CommandName="Delete" CommandArgument='<%# Eval("DataBoundGuidField") %>' />
服务器代码已经在适当的 DataBound 处理程序中以编程方式设置了“OnClick”JavaScript(这有效):
var btnSelectValue = CType(e.Row.FindControl("SelectValue"), Button)
btnSelectValue .Attributes.Add("onclick", String.Format("document.getElementById('{0}').value=document.getElementById('{1}').value; return true;", SourceField.ClientID, TargetField.ClientID))
然后服务器代码有一个点击处理程序:
protected void DeleteButtonClickHandler(object sender, EventArgs e)
{
// this line is the problem - it is always string.Empty in IE9 but works in Chrome !?
var selectedValue = TargetField.Value
}
我现在不需要了解重写它的方法,只需了解为什么这种将值复制到元素并在服务器上读取它的机制在 Chrome 中有效但在 IE9 中无效......以及是否存在使固定。提前谢谢。
更新
根据要求,这里是渲染 HTML 的前几行(没有 META):
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head><link href="..</head>
以下是 ASPX 标记的前几行:
<%@ Page Language="C#" MasterPageFile="~/Masters/Menu.master" AutoEventWireup="false" CodeFile="Default.aspx.cs" Inherits="EditScreen_Default" title="Edit Screen" %>
<asp:Content ID="Content1" ContentPlaceHolderID="ContentPlaceHolderMain" Runat="Server">
<%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>
这是分别以 HTML 呈现的 SourceField.CliendId / TargetField.ClientId 值:
<input type="hidden" name="ctl00$ContentPlaceHolderMain$GridViewRows$ctl03$SourceField" id="ctl00_ContentPlaceHolderMain_GridViewRows_ctl03_SourceField" value="8aaa7a7a-7082-4a1b-8dab-c25b0d98c263" />
<input type="hidden" name="ctl00$ContentPlaceHolderMain$TargetField" id="ctl00_ContentPlaceHolderMain_TargetField" />