2015年8月27日 星期四

在IE與Edge瀏覽器中,HttpPostedFile FileName 傳遞完整路徑

好久沒有發文了,最近換了工作,所以又開始往不同領域發展,廢話不多說啦。


剛剛在試著使用jQueryFileUpload 搭配泛型處理涵式來進行檔案上傳的動作,發現在IE瀏覽器
與新的Edge瀏覽器,當<input="file">  Post 到後端的時候,後端總是接收到完整的檔案名稱,也就是路徑都含在裡面,導致上傳有一些問題,反倒是FireFox 與 Chrome 只會傳單純的檔案名稱:

Chrome→ 2015/8/27 下午 10:31:29 - 0c99b5562ee5da6e45b8_228x129.jpg, image/jpeg, 7774
IE→ 2015/8/27 下午 10:38:26 - D:\C\2011-07-02 15.42.47.jpg, image/jpeg, 302549

可以看到紅色的標示,IE傳遞的是完整的磁碟路徑,所以導致後端在存檔時發生System.NotSupportedException問題,這個時候只要把所接到的檔案路徑加上Path.GetFileName()這個方法判斷就好了,直接擷取檔案名稱。



2014年4月19日 星期六

[Exchange Web Services Managed API[C#][E-mail] 存取公司內部Exchange Server 內相關資訊

一段時間沒有發文章,每天都在加班,來記錄一下最近公司的需求。

Request:

原本系統的報表寄送是請User填上收件者的Email,但是最近新增的另外一支報表是要給老闆使用的,總不能讓老闆一直複製貼上,感覺很沒有Sence,所以花了一個晚上的時間去研究了Exchange Web Services Managed API,讓老闆有感覺在使用Outlook的 自動檢查名稱功能,廢話不多說,來看程式吧!

Step 1.


先去Microsoft下載API元件









Step 2.
Install EwsManagedApi.MSI,You can Get It!


Step 3.

將.dll 加入致你的專案內












Setp 4.

直接來看程式吧!

using Microsoft.Exchange.WebServices.Data;












Step 5.
and You can get it















If this is helpful to you,You can give me +1!

If You have a Problems ,You can give me a message or Send email to me!







2014年1月11日 星期六

[ASP.NET][C#] [EN] This Row already belongs to another table [CHT] 這個資料列已經屬於其他資料表。

紀錄一下今天碰到的問題

[EN] This Row already belongs to another table  [CHT] 這個資料列已經屬於其他資料表。

今天利用一個 Function 回傳 DataRow,想要加入至另外一個DataTble,
但是發現無法使用Data_Table.Rows.Add(Data_Row); 

系統提示[EN] This Row already belongs to another table  [CHT] 這個資料列已經屬於其他資料表。

Google一下,有一位網友也碰到此問題,

發現是需要使用另外一個方法Data_Table.ImportRow(Data_Row);

使用上述方法即可。



2013年10月23日 星期三

[ASP.NET][C#] RegisterStartupScript跟RegisterClientScriptBlock的差別

文章出處

今天研究了上方的文章,自己也實作一下,免得日後忘記。

依照上方的網頁解說,再加上自己額外的onclientclick測試,讓自己更清楚流程。

執行的順序會是這樣:

當Client端按下Button後,執行順序會是這樣

1.Click
2.Sea
3.Hello World

OnClienClick 一定會先執行,再來以下面的程式看起來會先執行Hello World,但其實不是這樣,ScriptManager.RegisterStartupScript 會註冊在 </form> 之前,而ScriptManager.RegisterClientScriptBlock會註冊在<form>之後,所以當網頁PostBack回來後,會執行<form>之後的 HelloSea(),再來才會執行 HellloWorld()

codebehind:

protected void Button1_Click(object sender, EventArgs e)
    {
        //故意寫成這樣
        ScriptManager.RegisterStartupScript(this,this.Page.GetType(), "Hello", "HelloWorld();", true);
        ScriptManager.RegisterClientScriptBlock(this, this.Page.GetType(), "Test", "HelloSea();", true);
      
    }

.aspx

    <script type="text/javascript">
        //HelloWorld();
        function HelloWorld() {
            alert('Hello World');
        }
        function HelloSea() {
            alert('Hello Sea');
        }
</script>

<asp:Button ID="Button1" runat="server"  OnCommand="Button1_Command" Text="Button" OnClick="Button1_Click" OnClientClick="alert('Click');" />

2013年10月15日 星期二

[ASP.NET][C#] 當UpdatePanel 遇上Response.Write

最近幫公司撰寫報表,利用了網路上(Y2J)的文章,由DataTable直接轉換成Excel匯出,省了不少時間,但是在Debug的時候,發現網頁一直沒有Response出來,詢問我是否要另存新檔!?


然後用IE去Debug,又跑出沒有幫助的提示訊息=_=.....

還好有了火狐的FireBug,找到了一串關鍵字,Sys.WebForms.PageRequestManagerParserErrorException: Sys.WebForms.PageRequestManagerParserErrorException: The message received from the server could not be parsed.

Google了一下,發現是與UpdatePanel與Response.Write所遇上的衝突,去了http://stackoverflow.com 找了答案,發現只要在Page_Load的地方加入下列文字,即可。

protected void Page_Load(object sender, EventArgs e) {
  ScriptManager scriptManager = ScriptManager.GetCurrent(this.Page);
  scriptManager.RegisterPostBackControl(this.btnExcelExport);
  //Further code goes here....
}


2013年4月27日 星期六

[ASP.NET][C#] Web Form 傳遞數值

介紹一個基本的網頁間傳遞數值的方法

首先先準備Web Form: Source.aspx、Destination.aspx


Source.aspx:

1
2
3
4
5
6
7
protected void Page_Load(object sender, EventArgs e)
    {
        string sName = "Edge", sUrl;
        int iAge = 24;
        sUrl = "Destination.aspx.aspx?Name=" + sName + "&Age="+iAge.ToString();
        Response.Redirect(sUrl);
    }

解釋:

7. sUrl 為字串,其傳遞內容Destination.aspx.aspx 為目的地網址,後面接上要傳遞的參數,Variable  + Value,範例為 Name + sNam,另外可以使用&來傳遞其他參數

Destination.aspx

1
2
3
4
5
protected void Page_Load(object sender, EventArgs e)
    {

        Label1.Text = Request.QueryString["Name"] +"<br>"+ Request.QueryString["Age"];
    }

解釋:

4. 我們在Source網頁傳遞了變數名稱 Name以及Age,所以在Destination必須接受Source所傳遞的數值,使用Request.QueryString["Variable"] 就可以接收網址所傳送的數值

其產出結果為:

Edge
24


聽Gerald目前我們系統大部分都使用這樣的方法,所以先把這個學好吧~~~~

2013年4月16日 星期二

先前答應我妹的Blog.....

先前答應我妹幫我寫一個專屬的Blog,但實在抽不出時間好好規劃,想想有點對不起她,還讓他搬到痞客幫,http://kk339248.pixnet.net/blog,由於他有許多店家的品嘗邀約,想先幫他寫一個提供店家線上填單的網頁給他,讓店家可以不用透過粉絲團的方式也可以連絡他,這是前台的部分,後台的話以Gridview方式顯示,點選後可呈現詳細內容,以及發文後可再增加備註,表示已發文,大概先是這樣~~~~~

其實還打算規劃讓店家可以用註冊方式來追蹤是否已發文,但是感覺實用性不大。

首先規劃一下前台填單頁面:

1.姓名:
2.店家:
3.email:
4.電話:
5.地址:
6.留言內容:
7.驗證碼輸入

感覺七項看起來挺簡單的,可能要注意一些驗證以及住址可以直接撈現有的資料庫,這次打算一手包辦,Server自己架、網頁自己寫~