2022年9月7日 星期三

asp.net 2.0 升級4.0 問題1 元件名稱

 近日公司想要將asp.net 2.0的網站升級至 asp.net 4.0 

需要評估網站升級需要的OS & Framework  的等級 

就目前微軟在2022年公佈的 .NET Framework 各版本發行及 EOS 時間清單

的資料看來,應該可以升級到到asp.net 4.5之間,

但我們遇到的第一個問題就是

asp.net2.0 轉出的元件id  [ctl00_ContentPlaceHolder1_PanelParent]

asp.net 4.0 轉出的元件id為  [PanelParent]

Wath?

原來是因為 ASP.NET 4.0 預設的 clientIDMode 是使用 Predictable


而ASP.NET 4.0 以前的版本 clientIDMode 都是使用 AutoID

 

處理的方法就是在web.config 中設定

<system.web>
<pages controlRenderingCompatibilityVersion="4.5" clientIDMode="AutoID">
</system.web>


暫時收工……

參考:

https://www.dotnetcurry.com/ShowArticle.aspx?ID=492 介紹 ClientIDMode 的用法

https://blog.darkthread.net/blog/net-4x-eos-issue/ 其他

https://dotblogs.com.tw/rainmaker/2014/09/15/146557 -為什麼我的控制項的 id 多了ctl00



來看

2021年7月1日 星期四

[jquery-animate]錨點鏈接-滑動 需註意事項

 想做出html書 籤在同頁移動滑行 

在 html_load 時載入


 $('a[href*=\\#]:not([href=\\#])').click(function () {

                    // 選擇元素是<a>, 且href包含(*=)'#',但不是(not)'#'

                    // 當元素 $('a(...ry)')被按下(click)後執行 function(){...}

                    var target = $(this.hash);

                    

                    // 設target為網址錨點(this.hash)元素

                    $('html,body').animate({

                        // 網頁(html,body)執行動畫(animate)

                        scrollTop: target.offset().top

                        // 向上捲動(scrollTop): 距離( target於網頁相對位置(offset)的y座標(top) )

                    }, 1000);

                    // 執行時間1000ms

                    return false; // 停止動作

                }); // END $('a(...ry)').click

           });

一直有異常 後來發現一篇文章說明 
今天在移轉舊專案程式碼,遇到jquery一些錯誤,
查了一下原來是用的2.x版有特殊字元要跳脫的問題,記錄一下。

Syntax error, unrecognized expression:

your selector is not valid. # is a special char and needs to be escaped like 'a[href*=\\#]:not([href=\\#])'

來源:http://iambigd.blogspot.com/2017/06/jquery-syntax-error-unrecognized.html

原來#在javascript 是特殊字元 

所以一直在鬼打牆,特記之;


 

2021年6月9日 星期三

RadioButtonList的預設值

 猜一猜   Radio的預設值是否一樣呢

-----------------------------------------------Q1------------------------------------------------

if (!IsPostBack)

        {

            ListItem[] lis = new ListItem[5];

            lis[0] = new ListItem("1", "1");

            lis[1] = new ListItem("2", "2");

            lis[2] = new ListItem("3", "3");

            lis[3] = new ListItem("4", "4");

            lis[4] = new ListItem("5", "5");


            for (int i = 1; i <= 5; i++)

            {


                RadioButtonList rbt = (RadioButtonList)p_test.FindControl("rbt_" + i);

                 

                rbt.Items.AddRange(lis);

                rbt.SelectedValue = (i).ToString();

            } 

        }

-----------------------------------------------Q2------------------------------------------------

  if (!IsPostBack)

        { 

            for (int i = 1; i <= 5; i++)

            {


                ListItem[] lis = new ListItem[5];

                lis[0] = new ListItem("1", "1");

                lis[1] = new ListItem("2", "2");

                lis[2] = new ListItem("3", "3");

                lis[3] = new ListItem("4", "4");

                lis[4] = new ListItem("5", "5");


                RadioButtonList rbt = (RadioButtonList)p_test.FindControl("rbt_" + i);

                 

                rbt.Items.AddRange(lis);

                rbt.SelectedValue = (i).ToString();

            } 

        }

------------------------------------A1------------------------------------------


------------------------------------A2------------------------------------------


=============================================================

結果不同o 為什麼呢?

因為  ListItem[]  是要重新宣告的

不然 所有的 RadioButtonList.SelectedValue 

 只會抓 最後一個的預設值 做默認。

顯示的 結果就是A1

反之 有重新宣告  ListItem[] 

預設值就會正確。

大家可以試試看o



 



 

 




2021年5月11日 星期二

委派2-發送事件

委派 要先分清楚 事件是從那裡發生的 ,

又是由那支程式接應,

---------------宣告委派 (在觸發事件的程式內 )---------------------

 public delegate void MsgEventHandler(string show);  //宣告委派

 public event MsgEventHandler MsgEvent; //產生事件  

  MsgEvent.Invoke(msg);  //觸發事件


---------------宣告事件 (在接收事件程式內,產生回應)---------------------

MsgEvent += new MsgEventHandler(Response_Msg);     

   private void Response_Msg(string show) //接收事件 並處理該事件;show 事件回傳的資訊

    {

       //處理事件

    }


 


2020年9月2日 星期三

HTTP 錯誤 404.3 - Not Found

因為調整電腦,結果導致IIS異常

可參考 

1.https://blog.miniasp.com/post/2010/06/22/IIS-6-ASPNET-4-Installation-Notes


重新註冊 asp.net 

C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\aspnet_regiis.exe -i


 2.https://dotblogs.com.tw/stanley14/2016/06/23/095523

雖然是wcf但都是網頁程式,大致上的設定還是相同的。

2020年2月14日 星期五

[Asp.Net]CheckBoxList的應用


在存取 CheckBoxList 時,發現不是只用 SelectedIndexChanged 取的SelectedValue
就好,因為它有[覆選。

不能當做RadioButtonList 用
 
本來是想找找看有沒有checked 這樣的東西,看來是沒有
突然靈光一閃,應該是所有的選項 都要掃一遍。

所以重新整理如下:

    private void chk_SelectedIndexChanged(object sender, EventArgs e)
    {
        CheckBoxList chk = (CheckBoxList)sender;
        string bank_id = chk.ID;

        //刪除所有存檔的資料       
        Transcript.Row_Del(string.Format(" bank_id = '{0}' ", bank_id));  

        foreach (ListItem s in chk.Items)
        {
            if (s.Selected)  //s.Selected 就是html 的checked 用在這裡
            { //新增 
                add_transcript(bank_id, s.Value, "m");
            } 
        } 
    }

2020年2月13日 星期四

[ASP.NET]在UpdatePanel中 動態產生Trigger

常常在網頁中 動能新增event 
但遇上UpdatePanel 是一個困擾

當我動態新增Trigger,系統只會作用一次
後來參考ASP.net,C#,在UpdatePanel中動態加入Trigger
原來是因為Trigger掉了

所以重新將Trigger加入 PageLoad 即可

if (this.ScriptManager1.IsInAsyncPostBack)
{
            UpdatePanel1.GetType().GetMethod("Initialize", BindingFlags.NonPublic |              BindingFlags.Instance).Invoke(UpdatePanel1, null);
}


//==========================================================
範列

AsyncPostBackTrigger trigger = new AsyncPostBackTrigger();
           
                    CheckBoxList chk = new CheckBoxList();
                    chk.ID = ds["rowno"].ToString();
                    chk.RepeatDirection = RepeatDirection.Horizontal;
                    chk.AutoPostBack = true;
                    chk.SelectedIndexChanged += new EventHandler(chk_SelectedIndexChanged);

                    trigger.ControlID = chk.ID; //要偵測的物件ID
                    trigger.EventName = "SelectedIndexChanged"; //Button的觸發事件為Click
                    up_list.Triggers.Add(trigger); //UpdatePanel

                    string[] itmes = item.Split('|');
                    int i = 0;
                    foreach (string s in itmes)
                    {
                        string[] o = s.Split(',');
                        ListItem litem = new ListItem(o[0], o[1]);

                        if (i == 0)
                        {
                            litem.Selected = true;
                        }

                        if (getSelected(ds["rowno"].ToString(), o[1]))
                        {
                            litem.Selected = true;
                        }


                        chk.Items.Add(litem);

                        i++;
                    }

                    td2.Controls.Add(chk); //Panel

    p_list.Controls.Add(td2); //Panel