none
UC 公開屬性問題請教 RRS feed

  • 問題

  • 您好:

    我參考 https://dotblogs.com.tw/mis2000lab/archive/2014/06/21/uc_public_property_easy_20140621.aspx

    其 ascx 加了2張圖

    <div>
    <asp:Panel ID="VBPanel" runat="server">
        <asp:Image ID="Image_VB" runat="server" ImageUrl="~/ucx/t05/BOOK_VB.jpg" />
    </asp:Panel>
    
    <asp:Panel ID="CSPanel" runat="server">
        <asp:Image ID="Image_CS" runat="server" ImageUrl="~/ucx/t05/BOOK_CS.jpg" />
    </asp:Panel>
    </div>

    ascx.cs 用了emnu

        //------------------------
        public enum myBook { CS,VB };
    
        public myBook DisplayBook { set; get; }
    
        public void xx() { 
            switch (DisplayBook)
            {
                case myBook.CS:
                    CSPanel.Visible = true;
                    VBPanel.Visible = false;
                    break;
    
                case myBook.VB:
                    CSPanel.Visible = false;
                    VBPanel.Visible = true;
                    break;
            }
        }

    aspx 加了

     <mis2000lab:gv  runat="server" ID="mis2000GV01"/>

    請問 我aspx.cs 如何 來設定 我要用 哪一張圖?

    我用 mis2000GV01.FindControl("DisplayBook"); 但接下來 沒東西可以接...

    原先範例 ,用<mis2000lab:gv runat="server" ID="Book_UC" DisplayBook="CS" />

    但這因 現有程式pre_load 已經有載入了,再加入此段會 重複顯示2次,所以 我取消不用

    謝謝!


    2019年5月3日 上午 08:25

所有回覆

  • 請為enum屬性加上Bindable指引, 就可以設定了, 請參考:

    How to set an enum value to a custom property of a web user control?

    2019年5月4日 上午 11:04
  • 您好:

    謝謝,不過 我用

    mis2000GV01.MyProperty 

    這一個MyProperty   有問題


    程式碼;

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="A01W.aspx.cs" Inherits="ucx_t05_A01W" %>
    <%@ Register TagPrefix="mis2000lab" TagName="gv" src="~/ucx/t05/A01.ascx" %>
    <!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>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                  <mis2000lab:gv  runat="server" ID="mis2000GV01" MyProperty="1" />            
            </div>
        </form>
    </body>
    </html>
    

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class ucx_t05_A01W : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        void Page_Init()
        {
    //        mis2000GV01.MyProperty 
        }
    
    }

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="A01.ascx.cs" Inherits="ucx_t05_A01" %>
    
    <div>
    <asp:Panel ID="VBPanel" runat="server">
        <asp:Image ID="Image_VB" runat="server" ImageUrl="~/ucx/t05/BOOK_VB.jpg" MyProperty="1" />
    </asp:Panel>
    
    <asp:Panel ID="CSPanel" runat="server">
        <asp:Image ID="Image_CS" runat="server" ImageUrl="~/ucx/t05/BOOK_CS.jpg" MyProperty="2" />
    </asp:Panel>
    </div>

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class ucx_t05_A01 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            xx(); // 放此,會重複 出現一次
        }
    
        //------------------------
        public enum myBook { CS, VB };
    
        [System.ComponentModel.Bindable(true)]
        public myBook DisplayBook { set; get; }
    
        public void xx()
        {
            switch (DisplayBook)
            {
                case myBook.CS:
                    CSPanel.Visible = true;
                    VBPanel.Visible = false;
                    break;
    
                case myBook.VB:
                    CSPanel.Visible = false;
                    VBPanel.Visible = true;
                    break;
            }
        }
    
    }

    2019年5月7日 下午 01:07
  • 屬性名稱是否應該是DisplayBook, 而不是MyProperty才對?
    2019年5月8日 上午 12:44
  • 您好:

    謝謝您,我修改如下,但在前端的

    <mis2000lab:gv  runat="server" ID="mis2000GV01" DisplayBook="<%# zz(1) %>"  />           

    這邊 去跑z(1) 或zz(2),都沒反應,要在 cs 內才會有校?

    這樣,若要依 某個欄位 去抓不同圖片,似乎就無法 達成了

    A01.ascx

    <%@ Control Language="C#" AutoEventWireup="true" CodeFile="A01.ascx.cs" Inherits="ucx_t05_A01" %>
    
    <div>
    <asp:Panel ID="VBPanel" runat="server">
        <asp:Image ID="Image_VB" runat="server" ImageUrl="~/ucx/t05/BOOK_VB.jpg"  />
    </asp:Panel>
    
    <asp:Panel ID="CSPanel" runat="server">
        <asp:Image ID="Image_CS" runat="server" ImageUrl="~/ucx/t05/BOOK_CS.jpg"  />
    </asp:Panel>
    </div>

    A01.ascx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    
    public partial class ucx_t05_A01 : System.Web.UI.UserControl
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            xx(); //若沒放, 會2張都跑出
        }
    
        //------------------------
        public enum myBook { CS, VB };
    
        [System.ComponentModel.Bindable(true)]
        public myBook DisplayBook { set; get; }
    
        public void xx()
        {
            switch (DisplayBook)
            {
                case myBook.CS:
                    CSPanel.Visible = true;
                    VBPanel.Visible = false;
                    break;
    
                case myBook.VB:
                    CSPanel.Visible = false;
                    VBPanel.Visible = true;
                    break;
            }
        }
    
    }

    A01W.aspx

    <%@ Page Language="C#" AutoEventWireup="true" CodeFile="A01W.aspx.cs" Inherits="ucx_t05_A01W" %>
    <%@ Register TagPrefix="mis2000lab" TagName="gv" src="~/ucx/t05/A01.ascx" %>
    <!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>
    </head>
    <body>
        <form id="form1" runat="server">
            <div>
                  <mis2000lab:gv  runat="server" ID="mis2000GV01" DisplayBook="<%# zz(1) %>"  />            
            </div>
        </form>
    </body>
    </html>
    

    A01W.aspx.cs

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.UI;
    using System.Web.UI.WebControls;
    using static ucx_t05_A01;
    
    public partial class ucx_t05_A01W : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            //mis2000GV01.DisplayBook = ucx_t05_A01.myBook.VB;
           // mis2000GV01.DisplayBook = zz(1);
        }
        void Page_Init()
        {
            //        mis2000GV01.MyProperty 
            // mis2000GV01.DisplayBook = ucx_t05_A01.myBook.VB;   
            
        }
    
        public myBook zz(int p ) {
    
            var h = myBook.VB;
            switch (p) {
                case 1:
                    h=myBook.VB;
                    break;
                case 2:
                    h = myBook.CS;
                    break;
    
            }
    
    
            return h;
    
    
        }
    
    
    
    
    }

    2019年5月12日 上午 03:48
  • 2019年5月27日 上午 12:20
  • 請把原ASCX.CS檔案中的xx函式的程式碼的內容:

    public void xx()
        {
            switch (DisplayBook)
            {
                case myBook.CS:
                    CSPanel.Visible = true;
                    VBPanel.Visible = false;
                    break;
    
                case myBook.VB:
                    CSPanel.Visible = false;
                    VBPanel.Visible = true;
                    break;
            }
        }
    

    搬到ASCX.CS檔案的Page_Load函式

    protected void Page_Load(object sender, EventArgs e)
        {
            switch (DisplayBook)
            {
                case myBook.CS:
                    CSPanel.Visible = true;
                    VBPanel.Visible = false;
                    break;

                case myBook.VB:
                    CSPanel.Visible = false;
                    VBPanel.Visible = true;
                    break;
            } }

    然後於ASPX中這樣設定屬性即可:

    <mis2000lab:gv  runat="server" ID="mis2000GV01" DisplayBook="CS"  /> 
    

    2019年5月27日 上午 02:32
  •  您好:

    謝謝您,我有之前有改如您 方式來做,可以變化

    但 ,如下。我要於ASPX 動態改變他,卻不行,請問 有何方式 來處理呢?

    謝謝!

        <form id="form1" runat="server">
            <div>
                <% string ppp = "CS";
                    int a = 1;
                    if ( a == 1){
                        ppp = "VB";
                    }else{
                        ppp = "CS";
                    }
                    %>
                  <mis2000lab:gv  runat="server" ID="mis2000GV01" DisplayBook=<%=("VB") %> />            
            </div>
        </form>

    或者 ASPX.CS 內,要如何?

    我有試著用  void Page_Init()
        {
            this.mis2000GV01.DisplayBook
    //        mis2000GV01.MyProperty
        }

    但 後面.DisplayBook 卻無法 做其他關聯

    謝謝!

    2019年6月2日 上午 02:33
  • 您好:

    我另外使用以下方式ASPX.CS

    public partial class ucx_t05_A01W : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
    
        }
        void Page_Init()
        {
            mis2000GV01.DisplayBook = getZZ();
    //        mis2000GV01.MyProperty 
        }
    
    
        public ucx_t05_A01.myBook getZZ()
        {
            return ucx_t05_A01.myBook.CS;
        }
    
    
    }

    及APSX

                  <mis2000lab:gv  runat="server" ID="mis2000GV01" DisplayBook="<%# getZZ() %>" />            

    是可以跑出結果,後端卻會出現 如下錯誤訊息,但他實際仍可執行??

    此外,一般應該是 先撈資料,再呈現出她對應的圖片

    這樣的ASCX方式,適合拿來做 一般 圖片呈現用嗎?

    謝謝!

    2019年6月2日 上午 02:56
  • 這有可能是呼叫時機太早引起的, 您可以將以下的程式碼移至Page_Load函式再試看看:

    mis2000GV01.DisplayBook = getZZ();
    

    2019年6月3日 上午 12:36
  • User Control是在Server端執行, 您可以改成這樣試看看:

    <% mis2000GV91.DisplayBook=myBook.VB %>
    

    2019年6月3日 上午 12:41
  • 您好:

    mis2000GV01.DisplayBook = getZZ();

    放到  page_load 是可以跑

    <% mis2000GV91.DisplayBook=myBook.VB %>

    這一段,是要放到 ASPX內嗎? 無法這樣做! 找不到mis20000lab

    若我前面放

    <mis2000lab:gv  runat="server" ID="mis2000GV01"  /> 

    則他可 以 apsx.cs 內的 資料來呈現

    2019年6月7日 上午 01:14
  • mis2000GV91是UserControl的id, 如果UserControl的id是mis2000GV01, 就要改成mis2000GV01
    2019年6月7日 上午 09:22
  • 您好:

    我試過

     <mis2000lab:gv  runat="server" ID="mis2000GV01"  />    
                   <% mis2000GV01.DisplayBook = ucx_t05_A01.myBook.VB; %>

    但結果 還是以 aspx.cs 內的

        public ucx_t05_A01.myBook getZZ()
        {
            return ucx_t05_A01.myBook.CS;
        }

    來呈現!

       protected void Page_Load(object sender, EventArgs e)
        {
           // mis2000GV01.DisplayBook = getZZ();
        }

    前端也 不會依據 ucx_t05_A01.myBook.VB; 來秀出  對應的照片


    2019年6月9日 上午 01:40
  • 這是正常的, 第二種做法是runtime執行時期負責執行的, 會override之前的設定效果
    2019年6月9日 下午 12:06