隠しフィールドがある ASP ページがあります。このフィールドには、DB から削除するために選択された値が格納されます。
<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 では機能しない理由を理解するためだけに、今すぐ書き直す方法を理解する必要はありません...そして、修理。事前にthx。
アップデート
リクエストに応じて、レンダリングされた 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" />