2

我们有一个带有隐藏字段的 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" />
4

1 回答 1

0

您可以使用两个按钮的方法。

使用您现在拥有的删除按钮来调用 JavaScript。

<asp:Button ID="ButtonDelete" runat="server" Text="Delete" OnClientClick='<%# Eval("DataBoundGuidField","javascript:RunJavaScript({0});") %>' />

辅助按钮实际上会将页面发布回来。

<asp:Button ID="HdnDeleteButton" runat="server" Text="Delete" OnClick="DeleteButtonClickHandler" Style="display: none;" />

使用 Javascript 设置隐藏文件并单击隐藏按钮进行服务器端处理

function RunJavaScript(id){   
     $('#<%=TargetField.ClientID %>').value = id;

     //Call the hidden delete button for server side
     $('#<%=HdnDeleteButton.ClientID %>').click();    
}
于 2013-12-30T18:38:16.377 回答