2023年1月18日 星期三

ReplacableToken_SQL_SERVER_CONNECTION-Web.config Connection String_0

 在使用Jenkins 發佈時遇到一個問題就是建置好的web.config 的連線字串,會出現

ReplacableToken_SQL_SERVER_CONNECTION-Web.config Connection String_0

 這是網路上的作法

在你的xxx.xml上 

的PropertyGroup 加上

<AutoParameterizationWebConfigConnectionStrings>False
</AutoParameterizationWebConfigConnectionStrings>
<PropertyGroup Condition=" '$(Configuration)|$(Platform)' == '**Release**|AnyCPU' ">
    <DebugType>pdbonly</DebugType>
    <Optimize>true</Optimize>
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <ErrorReport>prompt</ErrorReport>
    <WarningLevel>4</WarningLevel>
    <!-- add the following line to avoid ConnectionString tokenization -->
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>
</PropertyGroup>
<PropertyGroup Condition="'$(Configuration)|$(Platform)' == '**ReleaseCERT**|AnyCPU'">
    <OutputPath>bin\</OutputPath>
    <DefineConstants>TRACE</DefineConstants>
    <Optimize>true</Optimize>
    <DebugType>pdbonly</DebugType>
    <PlatformTarget>AnyCPU</PlatformTarget>
    <ErrorReport>prompt</ErrorReport>
    <!-- add the following line to avoid ConnectionString tokenization -->
    <AutoParameterizationWebConfigConnectionStrings>False</AutoParameterizationWebConfigConnectionStrings>
</PropertyGroup>
 在我的Jenkins 上可以作用的是在
<MSBuild Projects="%(ProjectReference.FullPath)"
         Targets="Package"
         Properties="Configuration=$(Configuration);Platform=AnyCPU;
         AutoParameterizationWebConfigConnectionStrings=False"
         Condition="'%(ProjectReference.WebProject)'=='True'" 

 

2022年4月28日 星期四

ORA-12514

 小的改了一個web.config 的連線結果


ORA-12514: TNS:listener does not currently know of service requested in connect descriptor

哇哩咧.這什麼鬼..

=>換成中文再來一次

ORA-12514: TNS: 監聽器目前不知道連線描述區中要求的服務.

OK有沒有清楚一點,那講人話

ORA-12514提到監聽器(Listener)不認得服務描述,明顯為連上ORACLE但找不到指定的服務名稱。

我查了一下config ,是的,我錯了.我把SERVICE_NAME=XXX 寫錯了.嗯.低級錯誤

XXX 請填入您正確的服務名稱.不是XXX



參考自: https://blog.darkthread.net/blog/ora-12514/

2022年2月22日 星期二

'nuget' 不是內部或外部命令、可執行的程式或批次檔。

 在設定Jenkins 的新專案中有個建置環境

如圖



執行Windows 批次指令 很多google上的文章都是如下

nuget restore "D:\Project\MVCGit\MVCGit\MVCGit.sln"

or  nuget restore "%WORKSPACE%\MVCGit.sln"

但是......But 乖乖的我.填完再建置就會報錯

'nuget' 不是內部或外部命令、可執行的程式或批次檔。

我的天......

之後改成

C:\nuget\nuget.exe restore "D:\Project\MVCGit\MVCGit\MVCGit.sln"

再去Jenkins 上按下馬上建置....很開心的接受建置成功的綠勾勾


2022年1月12日 星期三

檔案上傳預覽

 通常在html中要上傳檔案只要將input type 設定成file就可以了

<input type="file" name="Attach" id="Attach" />

但是............如圖


只會出現檔名,有可能我選擇完就忘了.自己選了什麼相片(相信我.年紀到了就會這樣..)

加上兩段code 就可以解決這個問題了

紅色部份是相片預覽的部份,橘色部份是上傳的部份


<div class="form-group row">

       <div class="col-md-8">

         <img id="ShowPrePic" src="#" alt="your image" style="max-width:300px;max-height:300px;" />

       </div>

        <div class="col-md-4">

            <input type="file" name="Attach" id="AJpic" />

        </div>

  </div>


<script >

AJpic.onchange = evt => {

            const [file] = AJpic.files

            if (file) {

                ShowPrePic.src = URL.createObjectURL(file)

            }

        }

</script>

 





2022年1月4日 星期二

Telerik Grid 匯出Excel 加入時間檔名

 有時候使用者匯出excel時.會一直匯一直匯.......(迴圈中~

這時我們只好用上小技巧來讓使用者區分或是知道他們匯出的時間

如同紅色字體顯示.我們只要加上簡單的C#的DateTime.Now.ToString().....

就可以功能的實現這個功能了!

 .Excel(excel => excel

                        .FileName(DateTime.Now.ToString("yyyy-MM-dd-HH-mm-ss")+".xlsx")

                        .ProxyURL(Url.Action("StaticsExcelExport", "Uniform"))

                    )



2022年1月3日 星期一

Telerik Grid 匯出Excel 沒反應

寫程式哪有不犯蠢的.今天再次對自己示範了一次 

在Grid 裡要匯出excel 

於是我加了

.ToolBar(tools => tools.Excel())
也加了
.Excel(excel => excel
        .FileName("Kendo UI Grid Export.xlsx")
        .Filterable(true)
        .ProxyURL(Url.Action("Excel_Export_Save", "Grid"))
    )

但是如圖所示,按了就是沒反應...就只給我橘色的框.

左思右想.不明白.又回頭看了看範例檔(還不止看了一次XD)

登愣~~~原來我少了基本的引用

<script src="//cdnjs.cloudflare.com/ajax/libs/jszip/2.4.0/jszip.min.js"></script>

加了之後就可以使用了...掯(有蠢到~


完整官網範例如下:

<script src="//cdnjs.cloudflare.com/ajax/libs/jszip/2.4.0/jszip.min.js"></script>


@(Html.Kendo().Grid<Kendo.Mvc.Examples.Models.ProductViewModel>()
    .Name("grid")
    .Columns(columns => {
         columns.Bound(p => p.ProductName).Width(300)
                .ClientFooterTemplate("Total Count: #=count#")
                .ClientGroupFooterTemplate("Count: #=count#");
         columns.Bound(p => p.UnitPrice).Width(300);
         columns.Bound(p => p.UnitsOnOrder).Width(300)
                .ClientFooterTemplate("Average: #=average#")
                .ClientGroupFooterTemplate("Average: #=average#").Exportable(false);
         columns.Bound(p => p.UnitsInStock).Width(300)
                .ClientFooterTemplate("Min: #= min # Max: #= max #")
                .ClientGroupHeaderTemplate("Units In Stock: #= value # (Count: #= count#)");
     })
    .ToolBar(tools => tools.Excel())
    .Pageable()
    .Sortable()
    .Groupable()
    .Excel(excel => excel
        .FileName("Kendo UI Grid Export.xlsx")
        .Filterable(true)
        .ProxyURL(Url.Action("Excel_Export_Save", "Grid"))
    )
    .Reorderable(r => r.Columns(true))
    .Resizable(r => r.Columns(true))
    .ColumnMenu()
    .DataSource(dataSource => dataSource
        .Ajax()
        .PageSize(7)
        .Group(g => g.Add(p => p.UnitsInStock))
        .Aggregates(aggregates =>
        {
            aggregates.Add(p => p.UnitsInStock).Min().Max().Count();
            aggregates.Add(p => p.UnitsOnOrder).Average();
            aggregates.Add(p => p.ProductName).Count();
            aggregates.Add(p => p.UnitPrice).Sum();
        })
        .Read(read => read.Action("Excel_Export_Read", "Grid"))
    )
)

https://demos.telerik.com/aspnet-mvc/grid/excel-export

2021年12月27日 星期一

在 Kendo的MVC Grid中建立唯讀column

 當我們建立Kendo 的MVC grid時會有以下代碼

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
@(
Html.Kendo().Grid<KendoGridReadOnlyColumn.Models.TestModel>()
    .Name("Blog_Grid")
    .Columns(columns =>
    {
        columns.Bound(p => p.column1).Title("Column 1");
        columns.Bound(p => p.column2).Title("Column 2");
        columns.Bound(p => p.column3).Title("Column 3");
        columns.Bound(p => p.column4).Title("Column 4");
        columns.Bound(p => p.column5).Title("Column 5");
        columns.Bound(p => p.column6).Title("Column 6");
        columns.Bound(p => p.column7).Title("Column 7");

        columns.Command(command => { command.Edit(); command.Destroy(); });
    })
    .ToolBar(tools =>
    {
        tools.Create();
    })
    .Pageable(pageable => pageable
        .Refresh(true)
        .PageSizes(new[] { 10, 20, 40, 60, 100, 200, 300 })
        .ButtonCount(10)
    )
    .Sortable()
    .Filterable()
    .Resizable(resize => resize.Columns(true))
    .Editable(editable => editable.Mode(GridEditMode.InLine))
    .DataSource(datasource => datasource
                    .Ajax()
                    .PageSize(10)
                    .Model(model => model.Id(p => p.column1))
                    .Create(create => create.Action("Create", "Home"))
                    .Read(read => read.Action("Read", "Home"))
                    .Update(update => update.Action("Update", "Home"))
                    .Destroy(update => update.Action("Destroy", "Home"))
    )
)

方法1.
這時我們可以在.Sortable()下面加入一行.Events(events => events.Edit("edit"))

.Sortable()
.Events(events => events.Edit("edit"))


接下來再寫個function
<script type="text/javascript">
    function edit(e) {
        if (e.model.isNew() == false) {
            $("#column1").attr("readonly", true); //想要唯讀的欄位
        }
    }
</script>

大功告成
參考來源
http://www.adambumgardner.com/blog/2015/12/17/make-a-read-only-column-in-kendo-ui-grid-edit-mode
方法2.

.Model(model => model.Id(p => p.column1))
改成
model.Field(model => p.column1).Editable(false); 

2021年12月2日 星期四

kendo UI DatePicker language(語系)

在專案裡試了  kendoDatePicker ,很開心的使用了.後來發現.呃...沒有User 最愛的中文

如圖

其實是少了一個設定:

下面的js 記得要引用

 <script src="https://kendo.cdn.telerik.com/2019.2.514/js/cultures/kendo.culture.zh-TW.min.js">

</script>

    <input id="datepicker" />

    <script>

      $("#datepicker").kendoDatePicker({

        culture:"zh-TW",  <===== 加入這個設定

        value: new Date()

      });

    </script>

再次登場.中文出現








2021年10月21日 星期四

在MVC 的 Layout 中建置動態 Menu

想當年Asp.net WebForm  ,其實現在它也還活得好好的. 在開發時有很多很多的控制項和樣本.讓大家想怎樣就怎樣.有個東西叫Master Pages主版頁面及Content Pages內容頁面 ,在如今MVC當道的現在.很多年輕人.應該沒有聽過..長話短說..當初的menu , navbar都可以通通放在Master Pages 用程式控制.BUT 換來MVC 之後..只知道可以放在layout.cshtml 但是但是....要動態的,簡單嘛..放一個Model就好了.對吧? 於是乎傻傻的笨笨的要動手了.但是但是...捫心自問Layout.cshtml 的contorller 在哪裡? 真的被自己婊到...
在本人不專業的處理過程如下:
1.先建立一個MVC專業
2.在HomeController裡建立兩個Action 如圖
3.建立個別的View如圖
 
建立好了之後將Layout 裡屬於header的部份,剪下貼到TopHeader.cshtml裡


再來改寫Layout.cshtml的內容

LeftMenu.cshtml的部份也一樣.


這時的Layout.cshtml應該會長這樣

執行成功就跟之前畫面一樣.但我們要的是動態的,
所以呢先建立一個viewmodel 如圖


4.讀取動態資料
5.修改前端的view

LeftMenu
TopHeader


Layout

執行:
WTF 為什麼是空的?????
請注意:這時要用Html.RenderAction
如圖


再來一次


這個時候就可以正常顯示了!

2021年10月13日 星期三

EPPlus Please set the ExcelPackage.LicenseContext property

 使用EPPlus 來建立Excel是很方便的..一如往常的


But  


What???? 居然會報錯

Google 了一下原來是因為EPPlus 的新版本的問題.
這時只要加上這句

ExcelPackage.LicenseContext = LicenseContext.NonCommercial;


就可以正常運作了!






簽署時發生錯誤: 無法簽署 bin\Debug\app.publish\XXX.exe。SignTool Error: No certificates were found that met all the given criteria.

 這是一個程式碼簽署憑證的問題。當您的專案設定要進行程式碼簽署,但系統找不到合適的憑證時就會出現這個錯誤。以下是幾種解決方法: 方法 1:移除程式碼簽署設定 如果您不需要程式碼簽署,可以在專案中移除相關設定: 在 Visual Studio 中右鍵點擊專案 → 屬性 點擊「...