none
modalpopupextender上の情報がJavascriptで読み込めない RRS feed

  • 質問

  • modalpopupextender上の情報がJavascriptで読み込めずに困っています。

    やりたいことは

    1.ASPXファイル上にListViewコントロール(メインのリストビュー)がある。

    2メインのリストビュー「編集」ボタンをクリックするとmodalpopupextenderでascxコントロールのパネルがポップアップ

    3.ポップアップしたパネル上のListView(作業用リストビュー)でチェックボックスがある。

    4.パネルで呼び出すascxコントロールにはプロパティで、メインのリストビュークリック行の情報を渡して情報を表示する。

    5.作業用リストビューでチェックボックスをクリックした行数が、メインメインのリストビューの「編集」ボタンをクリックした行の「残り数」を超えた場合、アラートを出す。t

    ですが、1-4mではできたのですが5.処理でパネル上に表示しているメインのリストビューから渡された情報をJavaScriptで読み込むと空っぽで困っています。

    何かうまく読み込める方法はございませんでしょうか?

    2017年7月27日 2:05

回答

  • 先の私のレスで、

    > 以下のようにしないとダメなのでは?
    >
    > if ((Number(LicenseCnt) - lenSelect.length) < 0) {

    と言っておいてハズレだったら何なので質問者さんのユーザーコントロールの JavaScript のコードの問題の一行のみ上記のように変更して検証してみました。

    結果は以下の画像の通り、割り当て数>所有数 のとき[確定]ボタンが disabled されます。使用したブラウザは Winsows 10 Pro 64-bit の IE11 です。

    ご自分でも試してみてください。

    なお、自分が検証した際はメインのページは質問者さんのコードではなく以下のように簡略化しました。今回の問題とはメインのページの ListView も ModalPopup も関係ないので。

    test.aspx.vb

    Partial Class test
        Inherits System.Web.UI.Page
    End Class

    test.aspx

    ユーザーコントロールを配置したのみです。ただし、Number を設定しないと動かないので以下のようにとりあえず "6" としました。

    <%@ Page Language="VB" AutoEventWireup="false" 
        CodeFile="test.aspx.vb" Inherits="test" %>
    
    <%@ Register Src="change.ascx" TagPrefix="uc1" TagName="allow_change" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script src="/Scripts/jquery-1.10.2.js"></script>
    </head>
    <body>
        <form id="form1" runat="server">
            <uc1:allow_change runat="server" ID="allow_change" Number="6"/>
        </form>
    </body>
    </html>

    先の私のレスで、

    > もっと削れると思いますけど・・・

    と書いたのはそこです。

    2017年7月29日 0:32

すべての返信

  • > 何かうまく読み込める方法はございませんでしょうか?

    原因を想定するに足る有用な情報が何もないので分かりません。

    今提供されている情報だけでは「JavaScript で読めないような書き方になっているから読めないのだと想像してます」程度のことしか言えません。質問者さんがどのようなコードを書いたのかが質問には書いてないので、そこで思考停止してしまいます。

    たぶん、それは私だけではなく、他の閲覧者の方も同じではないかと思います。

    (#今提供されている情報でピンポイントに原因が指摘できる人がいたらその人はエスパーだと思います)

    問題を再現できる必要最小限のサンプルコードを書いてアップできないでしょうか?


    あと、質問する際は一番最初に、何を作っているか(ASP.NET Web Forms アプリであろうと想像してますが) ご自分の環境(OS、IIS、.NET のバージョン、DB サーバーは何かとそのバージョン、ブラウザは何かなど)に関する情報を最低書いてください。
     
    適切に情報が提供されていれば、回答者が質問者さんの状況を的確に把握でき、タイムリーで的を得た回答が得られるということで、質問者さんにもメリットがあります。ガイドラインも出ていますので目を通していただければと思います。
     
    フォーラムのご利用方法(質問の投稿)について
    https://social.msdn.microsoft.com/Forums/ja-JP/b2074c04-2e91-414d-8e9e-d634be311e31


    • 編集済み SurferOnWww 2017年7月27日 3:20 誤字訂正
    2017年7月27日 3:15
  • すみません。環境は以下の通りです。

    サーバーOS:Windows 2012 R1 Standard

    IIS:IIS 8.5

    使用.NET:4.6.2(Odp.net 11.2.1を使用)

    DBサーバー:Widows 2008 R2+Oracle 11.2

    ブラウザ:IE9~11

    クライアントOS:Win7Pro~Win10 Pro

    再現用のソースです。

    メインのWEBフォーム(test.aspx)

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="contents_test" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
    
        <script src="../js/jquery/jquery-1.10.2.js" type="text/javascript"></script>
        <script src="../js/jquery/jquery-ui.js" type="text/javascript"></script>
    
        <%@ Register Src="change.ascx" TagPrefix="uc1" TagName="allow_change" %>
        <style type="text/css">
            /*テーブル*/
            .table1grid {
                border: 2px solid #808080;
                padding: 20px;
                /*margin-left: 20px;*/
                margin-bottom: 10px;
                border-collapse: collapse;
                text-align: left;
            }
    
                .table1grid th {
                    color: #FFFFFF;
                    background-color: #247eec;
                    border-style: solid;
                    border-color: #d4d4d4;
                    border-width: 1px;
                    text-align: center;
                    padding: 5px;
                    white-space: nowrap;
                }
    
                .table1grid td {
                    color: #000000;
                    background-color: #f1f5fe;
                    border-style: solid;
                    border-width: 1px;
                    padding: 2px 5px 2px 5px;
                    white-space: nowrap;
                    text-align: left;
                }
        </style>
    </head>
    <body>
        <form id="form1" runat="server">
            <AjaxControlToolkit:ToolkitScriptManager ID="PageScriptMngr"
                runat="server" EnableScriptGlobalization="true" EnablePartialRendering="true" />
            <div>
                <asp:ListView ID="MainLv" runat="server" DataKeyNames="Productid,製品名,所有数,割り当て">
                    <LayoutTemplate>
                        <table class="table1grid SortableTable">
                            <thead>
                                <tr>
                                    <th rowspan="2">製品名</th>
                                    <th colspan="2">数</th>
                                </tr>
                                <tr>
                                    <th>所有</th>
                                    <th>割り当て</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr runat="server" id="itemPlaceholder"></tr>
                            </tbody>
                        </table>
                    </LayoutTemplate>
                    <ItemTemplate>
                        <tr id="datarow" runat="server">
                            <td><%# Eval("製品名")%></td>
                            <td><%# Eval("所有数")%></td>
                            <td>
                                <asp:UpdatePanel ID="AllowBtnUpPnl" runat="server">
                                    <ContentTemplate>
                                        <%# Eval("割り当て")%>
    
                                        <asp:Button ID="AllowBtn" runat="server" Text="変更" CommandName="Allow"
                                            CommandArgument='<%# CType(Container, ListViewDataItem).DataItemIndex %>' />
                                    </ContentTemplate>
                                </asp:UpdatePanel>
                            </td>
                        </tr>
                    </ItemTemplate>
                    <EmptyDataTemplate>
                        <table class="table1grid SortableTable">
                            <thead>
                                <tr>
                                    <th rowspan="2">製品名</th>
                                    <th colspan="2">数</th>
                                </tr>
                                <tr>
                                    <th>所有</th>
                                    <th>割り当て</th>
                                </tr>
                            </thead>
                            <tbody>
                                <tr>
                                    <td colspan="3" style="background-color:#FFCCCC"">表示条件と一致するライセンスはありません</td>
                                </tr>
                            </tbody>
                        </table>
                    </EmptyDataTemplate>
                </asp:ListView>
                <!--ポップアップ-->
                <asp:Panel ID="MsgDrgPnl" runat="server">
                    <asp:Panel ID="MsgPnl" runat="server" BackColor="#CCCCCC" Style="display: none">
                        <uc1:allow_change runat="server" ID="allow_change" />
                        <div style="text-align: center;">
                            <asp:HiddenField ID="AllowCallerDummyCancel" runat="server" />
                        </div>
                    </asp:Panel>
                </asp:Panel>
                <!--呼び出し-->
                <asp:HiddenField ID="AllowCaller" runat="server" />
                <AjaxControlToolkit:ModalPopupExtender ID="AllowCaller_ModalPopupExtender" runat="server"
                    Enabled="True" TargetControlID="AllowCaller"
                    PopupDragHandleControlID="MsgDrgPnl" PopupControlID="MsgPnl"
                    CancelControlID="AllowCallerDummyCancel" BackgroundCssClass="PopupBack" Drag="False" DropShadow="False" />
            </div>
        </form>
    </body>
    </html>
    

    メインのWEBフォームのコード(test.aspx.vb)

    Imports System.Data
    
    Partial Class contents_test
        Inherits System.Web.UI.Page
        Private Sub MainLv_ItemCommand(sender As Object, e As ListViewCommandEventArgs) Handles MainLv.ItemCommand
            Select Case e.CommandName
                Case "Allow"
                    MainLv.SelectedIndex = e.CommandArgument
                    Dim DataKey As DataKey = MainLv.DataKeys(e.CommandArgument)
                    'Dim DataItem As ListViewItem = MainLv.Items(e.CommandArgument)
                    With allow_change
                        .ProductID = DataKey("ProductID") '.Value.ToString
                        .ProductName = DataKey("製品名").ToString
                        .Number = DataKey("所有数").ToString
                        .Wariate = DataKey("割り当て").ToString
                    End With
                    AllowCaller_ModalPopupExtender.Show()
    
                    'Case "UseualProduct"
    
            End Select
        End Sub
    
        Private Sub allow_change_ButtonClick(sender As Object, e As EventArgs, EventObject As Object) Handles allow_change.ButtonClick
            AllowCaller_ModalPopupExtender.Show()
        End Sub
    
        Private Sub allow_change_CommitButtonClick(sender As Object, e As EventArgs, EventObject As Object) Handles allow_change.CommitButtonClick
            '確定時の処理
            '~
            '
    
            '閉じる
            AllowCaller_ModalPopupExtender.Hide()
    
        End Sub
        Private Sub allow_change_CloseButtonClick(sender As Object, e As EventArgs, EventObject As Object) Handles allow_change.CloseButtonClick
            AllowCaller_ModalPopupExtender.Hide()
    
        End Sub
        Private Sub contents_test_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
            '本当はDBから情報を拾ってきます。
            Dim Tbl As New DataTable
    
            Tbl.Columns.Add("ProductID")
            Tbl.Columns.Add("製品名")
            Tbl.Columns.Add("所有数")
            Tbl.Columns.Add("割り当て")
    
            For i As Integer = 0 To 10
                Dim dRow As DataRow = Tbl.NewRow
    
                dRow("ProductID") = i
                dRow("製品名") = "Product1" & i
                dRow("所有数") = 10 + i
                dRow("割り当て") = 2 + i
    
                Tbl.Rows.Add(dRow)
            Next
    
            MainLv.DataSource = Tbl
            MainLv.DataBind()
    
        End Sub
    End Class

    呼び出しするWEBコントロール(change.ascx

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="change.ascx.vb" Inherits="test_change" %>
    <style type="text/css">
        <!--
        table.select-table {
            empty-cells: show;
            border-collapse: collapse;
            border: solid 1px #434343;
            font: 12px;
        }
    
            table.select-table tbody {
                height: 150px;
                /*   Width: 250px;*/
                overflow-x: hidden;
                overflow-y: scroll;
            }
    
            table.select-table tr {
                border-bottom: solid 1px #434343;
                height: 15px;
            }
    
            table.select-table th {
                background: blue;
                border: 1px solid black;
                color: white;
                padding: 4px;
                text-align: center;
            }
    
            table.select-table td {
                text-align: center;
                padding: 4px;
                border: 1px solid black;
            }
    
    
            table.select-table .tr-odd {
                background: #eeeeee;
                height: 15px;
            }
    
            table.select-table .tr-selected {
                background: #dff3c4;
                height: 15px;
            }
    
        ul li {
            list-style: square;
        }
    
        .productinfo {
            width: 195px;
        }
    
        -->
    </style>
    <asp:UpdatePanel ID="LicenseInfoUpPml" runat="server">
        <ContentTemplate>
            <table class="Headder">
                <tr>
                    <td>
                        <asp:Button ID="CommitBtn" runat="server" Text=" 確定 " CssClass="regButton" />
                        <asp:Button ID="CancelBtn" runat="server" Text="キャンセル" CssClass="cancelButton" />
                    </td>
                    <td>
                        <!--クリック行の情報-->
                        <table class="table1grid " id="productinfo">
                            <tr>
                                <th>製品名</th>
                                <td class="productinfo">
                                    <%= ProductName %>
                                </td>
                            </tr>
                            <tr class="NumberCount">
                                <th>所有数</th>
                                <td class="data">
                                    <%= Number %>
                                </td>
                            </tr>
    
                        </table>
                    </td>
                </tr>
            </table>
    
            <!--割り当ての設定-->
            <asp:Panel ID="AllowLvPnl" runat="server" CssClass="AllowLv">
                <table class="AllowLv">
                    <tr>
                        <td style="text-align: right; width: 250px">
                            <asp:Label ID="AllowCntLbl" runat="server" Text="0" CssClass="Cnt" />
                            人割り当て
                        </td>
                    </tr>
                </table>
    
                <asp:ListView ID="AllowLv" runat="server" DataKeyNames="Row,User">
                    <LayoutTemplate>
                        <asp:Panel ID="AllowLvScrlPnl" runat="server" Height="250px" Width="650px" ScrollBars="Auto">
                            <table class="table1grid_small SortableTable select-table">
                                <thead>
                                    <tr>
                                        <th>割り当て</th>
                                        <th>使用者</th>
                                    </tr>
                                </thead>
                                <tbody>
                                    <tr id="itemPlaceholder" runat="server">
                                    </tr>
                                </tbody>
                            </table>
                        </asp:Panel>
                    </LayoutTemplate>
                    <ItemTemplate>
                        <tr class='<%# If(Eval("Wariate") = "TRUE", "tr-selected", "") %>'>
                            <td>
                                <asp:CheckBox ID="AllowLvChk" runat="server" Checked='<%# Bind("Wariate") %>' OnClick=" TableSelectCount(); return;" /><%----%>
                            </td>
                            <td>
                                <asp:Label ID="User" runat="server" Text='<%# Bind("User") %>' />
    
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:ListView>
            </asp:Panel>
    
            <script type="text/javascript">
    
                //テーブルの選択行数を数える
                function TableSelectCount() {
                    $('tr', '.select-table')
                      .hover(
                        function () {
                            $(this).addClass('tr-selected');
                        },
                        function () {
                            if (!$('input[type="checkbox"]', this).prop('checked')) {
                                $(this).removeClass('tr-selected');
                            }
                        }
                      );
                    var lenSelect = $('.AllowLv .select-table :checked');
                    $('.AllowLv .Cnt').text(lenSelect.length);
                    alert(lenSelect.length);
                    alert($('.Headder #productinfo .NumberCount .data').text());
    
                    var LicenseCnt = $('.Headder #productinfo .NumberCount .data').text();
    
                    //所有数を超えたら確定させない<=ここが思ったように動作しません。全てFALSEとなる。
                    if ((LicenseCnt - lenSelect) < 0) {
                        $(' #<%= CommitBtn.ClientID %>').prop('disabled', true);
                    } else {
                        $(' #<%= CommitBtn.ClientID %>').prop('disabled', false);
                    };
                }
            </script>
        </ContentTemplate>
    </asp:UpdatePanel>
    

    呼び出しするWEBコントロールのコードファイル(change.ascx.vb

    Imports System.Data
    
    Partial Class test_change
        Inherits System.Web.UI.UserControl
    
        Public Event ButtonClick(ByVal sender As Object, ByVal e As System.EventArgs, EventObject As Object)
        Public Event CloseButtonClick(ByVal sender As Object, ByVal e As System.EventArgs, EventObject As Object)
        Public Event CommitButtonClick(ByVal sender As Object, ByVal e As System.EventArgs, EventObject As Object)
        Public Property ProductName As String
    
        Public Property ProductID As String
    
        Public Property Number As String
    
        Public Property Wariate As String
    
        Private Sub test_change_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
            '割り当て数を表示
            AllowCntLbl.Text = Wariate
            'ユーザー一覧を表示
            SetSorce()
        End Sub
    
        Private Sub SetSorce()
            '本当はProductIDを元にDBから情報を拾ってきます。
            Dim Tbl As New DataTable
    
            Tbl.Columns.Add("Row")
            Tbl.Columns.Add("Wariate")
            Tbl.Columns.Add("User")
    
            For i As Integer = 0 To 10
                Dim dRow As DataRow = Tbl.NewRow
    
                dRow("Row") = i
                dRow("User") = "User" & i
                If i < Wariate Then
                    dRow("Wariate") = "TRUE"
                Else
                    dRow("Wariate") = "FALSE"
                End If
    
                Tbl.Rows.Add(dRow)
            Next
    
            AllowLv.DataSource = Tbl
            AllowLv.DataBind()
    
        End Sub
    
        Private Sub CommitBtn_Click(sender As Object, e As EventArgs) Handles CommitBtn.Click
            RaiseEvent CommitButtonClick(sender, e, sender)
        End Sub
    
        Private Sub CancelBtn_Click(sender As Object, e As EventArgs) Handles CancelBtn.Click
            RaiseEvent CloseButtonClick(sender, e, sender)
        End Sub
    End Class
    


    2017年7月27日 6:15
  • 先の私のレスで「問題を再現できる必要最小限」とお願いしましたが、アップされたコードは問題を再現するには不必要なコードが多々含まれていると思います。

    アップされたコードを、

    > //所有数を超えたら確定させない<=ここが思ったように動作しません。全てFALSEとなる。

    というところを中心に、問題を再現するのに不要な部分はどんどん削っていって、ホントにギリギリ「問題を再現できる必要最小限」にできないですか。

    その過程で質問者さんご自身で原因を見つけて自己解決できるかもしれません。それが質問者さんの望む解決法でもあるのではないかと思うのですが。

    2017年7月27日 15:14
  • 何度も申し訳ありません。不要なところを削ったソースを再計します。前のソースは邪魔だから消したほうがよいでしょうか?

    やりたいことは「WEBコントロールに渡した数をこえてチェックボックスをクリックしたら、確定ボタンはクリックできないようにしたい」です。

    以下は残っていますがお許しください

    ・子画面を閉じる処理
    ・jQueryを使用しているため、セレクターで使用のクラスの記述

    ・ダミーのデータを表示するための処理

    メインのASPX(test.aspx)

    <%@ Page Language="VB" AutoEventWireup="false" CodeFile="test.aspx.vb" Inherits="contents_test" %> <html> <head runat="server"> <script src="../js/jquery/jquery-1.10.2.js" type="text/javascript"></script> <script src="../js/jquery/jquery-ui.js" type="text/javascript"></script> <%@ Register Src="change.ascx" TagPrefix="uc1" TagName="allow_change" %> </head> <body> <form id="form1" runat="server"> <AjaxControlToolkit:ToolkitScriptManager ID="PageScriptMngr" runat="server" EnableScriptGlobalization="true" EnablePartialRendering="true" /> <div> <asp:ListView ID="MainLv" runat="server" DataKeyNames="Productid,製品名,所有数,割り当て"> <LayoutTemplate> <table border="1"> <tr> <th>製品名</th> <th>所有</th> <th>割り当て</th> </tr> <tr runat="server" id="itemPlaceholder"></tr> </table> </LayoutTemplate> <ItemTemplate> <tr id="datarow" runat="server"> <td><%# Eval("製品名")%></td> <td><%# Eval("所有数")%></td> <td> <%# Eval("割り当て")%> <asp:Button ID="AllowBtn" runat="server" Text="変更" CommandName="Allow" CommandArgument='<%# CType(Container, ListViewDataItem).DataItemIndex %>' /> </td> </tr> </ItemTemplate> </asp:ListView> <!--ポップアップ--> <asp:Panel ID="MsgDrgPnl" runat="server"> <asp:Panel ID="MsgPnl" runat="server" BackColor="#CCCCCC" Style="display: none"> <uc1:allow_change runat="server" ID="allow_change" /> <div style="text-align: center;"> <asp:HiddenField ID="AllowCallerDummyCancel" runat="server" /> </div> </asp:Panel> </asp:Panel> <!--呼び出し--> <asp:HiddenField ID="AllowCaller" runat="server" /> <AjaxControlToolkit:ModalPopupExtender ID="AllowCaller_ModalPopupExtender" runat="server" Enabled="True" TargetControlID="AllowCaller" PopupDragHandleControlID="MsgDrgPnl" PopupControlID="MsgPnl" CancelControlID="AllowCallerDummyCancel" BackgroundCssClass="PopupBack" Drag="False" DropShadow="False" /> </div> </form> </body> </html>

    メインのASPX)コード((test.aspx.vb)

    Imports System.Data
    
    Partial Class contents_test
        Inherits System.Web.UI.Page
    
    
        Private Sub MainLv_ItemCommand(sender As Object, e As ListViewCommandEventArgs) Handles MainLv.ItemCommand
    
            Select Case e.CommandName
                Case "Allow" '割り当てボタンをクリックしたときの処理
                    MainLv.SelectedIndex = e.CommandArgument
                    Dim DataKey As DataKey = MainLv.DataKeys(e.CommandArgument)
                    With allow_change
                        .ProductID = DataKey("ProductID")
                        .ProductName = DataKey("製品名").ToString
                        .Number = DataKey("所有数").ToString
                        .Wariate = DataKey("割り当て").ToString
                    End With
                    AllowCaller_ModalPopupExtender.Show()
            End Select
        End Sub
    
        Private Sub contents_test_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
            Dim Tbl As New DataTable '本当はDBから情報を拾ってきます。
    
            Tbl.Columns.Add("ProductID")
            Tbl.Columns.Add("製品名")
            Tbl.Columns.Add("所有数")
            Tbl.Columns.Add("割り当て")
    
            For i As Integer = 0 To 10
                Dim dRow As DataRow = Tbl.NewRow
    
                dRow("ProductID") = i
                dRow("製品名") = "Product1" & i
                dRow("所有数") = 3 + i
                dRow("割り当て") = 2 + i
    
                Tbl.Rows.Add(dRow)
            Next
    
            MainLv.DataSource = Tbl
            MainLv.DataBind()
        End Sub
    
        'ポップアップした画面を閉じる
        Private Sub allow_change_ButtonClick(sender As Object, e As EventArgs, EventObject As Object) Handles allow_change.ButtonClick
            AllowCaller_ModalPopupExtender.Hide()
    
        End Sub
    End Class
    

    WEBコントロール(change.ascx)

    <%@ Control Language="VB" AutoEventWireup="false" CodeFile="change.ascx.vb" Inherits="test_change" %>
    <asp:UpdatePanel runat="server" ID="ChangePartUpPnl">
        <ContentTemplate>
            <table class="Headder">
                <tr>
                    <td>
                        <asp:Button ID="CommitBtn" runat="server" Text=" 確定 " CssClass="regButton" />
                        <%--↑所有数を超えるチェックマークがあったらクリックさせたくない--%>
                        <asp:Button ID="CancelBtn" runat="server" Text="キャンセル" CssClass="cancelButton" />
                    </td>
                    <td>
                        <!--クリック行の情報-->
                        <table class="table1grid " id="productinfo">
                            <tr class="NumberCount">
                                <th>所有数</th>
                                <td class="data">
                                    <%= Number %>
                                </td>
                            </tr>
                        </table>
                    </td>
                </tr>
            </table>
    
            <!--割り当ての設定-->
            <asp:Panel ID="AllowLvPnl" runat="server" CssClass="AllowLv">
                <table class="AllowLv">
                    <tr>
                        <td style="text-align: right; width: 250px">
                            <asp:Label ID="AllowCntLbl" runat="server" Text="0" CssClass="Cnt" />
                            人割り当て
                        </td>
                    </tr>
                </table>
    
                <asp:ListView ID="AllowLv" runat="server" DataKeyNames="Row,User">
                    <LayoutTemplate>
                        <asp:Panel ID="AllowLvScrlPnl" runat="server" Height="250px" ScrollBars="Auto">
                            <table class="select-table" border="1">
                                <tr>
                                    <th>割り当て</th>
                                    <th>使用者</th>
                                </tr>
                                <tr id="itemPlaceholder" runat="server">
                                </tr>
                            </table>
                        </asp:Panel>
                    </LayoutTemplate>
                    <ItemTemplate>
                        <tr>
                            <td>
                                <asp:CheckBox ID="AllowLvChk" runat="server" Checked='<%# Bind("Wariate") %>'
                                    OnClick=" TableSelectCount(); return;" />
                            </td>
                            <td>
                                <asp:Label ID="User" runat="server" Text='<%# Bind("User") %>' />
                            </td>
                        </tr>
                    </ItemTemplate>
                </asp:ListView>
            </asp:Panel>
    
            <script type="text/javascript">
                //テーブルの選択行数を数える
                function TableSelectCount() {
                    //選択行を数える
                    var lenSelect = $('.AllowLv .select-table :checked');
                    $('.AllowLv .Cnt').text(lenSelect.length);
    
                    //所有数を取得
                    var LicenseCnt = $('.Headder #productinfo .NumberCount .data').text();
    
                    //所有数を超えたら確定させない <=ここが思ったように動作しません。全てFALSEとなる。
                    if ((LicenseCnt - lenSelect) < 0) {
                        $(' #<%= CommitBtn.ClientID %>').prop('disabled', true);
            } else {
                $(' #<%= CommitBtn.ClientID %>').prop('disabled', false);
            };
        }
            </script>
        </ContentTemplate>
    
    </asp:UpdatePanel>    
    

    change.ascxのコード(change.ascx.vb)

    Imports System.Data
    
    Partial Class test_change
        Inherits System.Web.UI.UserControl
    
        Public Event ButtonClick(ByVal sender As Object, ByVal e As System.EventArgs, EventObject As Object)
        Public Property ProductName As String
        Public Property ProductID As String
        Public Property Number As String
        Public Property Wariate As String
    
        Private Sub test_change_PreRender(sender As Object, e As EventArgs) Handles Me.PreRender
            '割り当て
    
    数を表示
            AllowCntLbl.Text = Wariate
            'ユーザー一覧を表示
            SetSource()
        End Sub
    
        Private Sub SetSource()
            '本当はProductIDを元にDBから情報を拾ってきます。
            Dim Tbl As New DataTable
    
            Tbl.Columns.Add("Row")
            Tbl.Columns.Add("Wariate")
            Tbl.Columns.Add("User")
    
            For i As Integer = 0 To 20
                Dim dRow As DataRow = Tbl.NewRow
    
                dRow("Row") = i
                dRow("User") = "User" & i
                If i < Wariate Then
                    dRow("Wariate") = "TRUE"
                Else
                    dRow("Wariate") = "FALSE"
                End If
    
                Tbl.Rows.Add(dRow)
            Next
    
            AllowLv.DataSource = Tbl
            AllowLv.DataBind()
        End Sub
      'ボタンのイベントを呼び出し側にイベントで知らせる
        Private Sub Button_Click(sender As Object, e As EventArgs) Handles CancelBtn.Click, CommitBtn.Click
            RaiseEvent ButtonClick(sender, e, sender)
        End Sub
    End Class

    2017年7月28日 1:42
  • > 不要なところを削ったソースを再計します。

    もっと削れると思いますけど・・・

    先の私のレスで、

    > //所有数を超えたら確定させない<=ここが思ったように動作しません。全てFALSEとなる。

    というところを中心に、問題を再現するのに不要な部分はどんどん削っていって・・・と書きましたが、そこを理解されているでしょうか?

    ModalPopup も ASP.NET も関係なくて JavaScript / jQuery の書き方、もっとピンポイントで言うと以下の一行が間違っているからだと思います。

    if ((LicenseCnt - lenSelect) < 0) {

    LicenseCnt って文字列ではないのですか? lenSelect って jQuery オブジェクトではないのですか? VB.NET 以上に型がイイカゲンな JavaScript でも (LicenseCnt - lenSelect) は成り立たないのでは?

    以下のようにしないとダメなのでは?

    if ((Number(LicenseCnt) - lenSelect.length) < 0) {

    2017年7月28日 14:13
  • 先の私のレスで、

    > 以下のようにしないとダメなのでは?
    >
    > if ((Number(LicenseCnt) - lenSelect.length) < 0) {

    と言っておいてハズレだったら何なので質問者さんのユーザーコントロールの JavaScript のコードの問題の一行のみ上記のように変更して検証してみました。

    結果は以下の画像の通り、割り当て数>所有数 のとき[確定]ボタンが disabled されます。使用したブラウザは Winsows 10 Pro 64-bit の IE11 です。

    ご自分でも試してみてください。

    なお、自分が検証した際はメインのページは質問者さんのコードではなく以下のように簡略化しました。今回の問題とはメインのページの ListView も ModalPopup も関係ないので。

    test.aspx.vb

    Partial Class test
        Inherits System.Web.UI.Page
    End Class

    test.aspx

    ユーザーコントロールを配置したのみです。ただし、Number を設定しないと動かないので以下のようにとりあえず "6" としました。

    <%@ Page Language="VB" AutoEventWireup="false" 
        CodeFile="test.aspx.vb" Inherits="test" %>
    
    <%@ Register Src="change.ascx" TagPrefix="uc1" TagName="allow_change" %>
    
    <!DOCTYPE html>
    
    <html xmlns="http://www.w3.org/1999/xhtml">
    <head runat="server">
        <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
        <title></title>
        <script src="/Scripts/jquery-1.10.2.js"></script>
    </head>
    <body>
        <form id="form1" runat="server">
            <uc1:allow_change runat="server" ID="allow_change" Number="6"/>
        </form>
    </body>
    </html>

    先の私のレスで、

    > もっと削れると思いますけど・・・

    と書いたのはそこです。

    2017年7月29日 0:32