2008年9月18日 星期四

"build error" allowDefinition='MachineToApplication

http://msdn.microsoft.com/en-us/library/aa479312.aspx

As mentioned before, Visual Studio 2005 normally considers all files in a folder or sub-folder to be part of the Web project. By default, the conversion wizard will create a backup of your Web project in a safe location, but it is possible for the user to overwrite the default. If you put the backup folder in the Web application's folder tree, you will get this somewhat cryptic build error:

Error 1 - It is an error to use a section registered as 
allowDefinition='MachineToApplication' beyond application level

How to fix

Make sure your backup location is not in the Web application's root folder or sub-folder!

2008年9月5日 星期五

WCF 使用ASP.NET 的Session

http://silverlight.net/forums/p/23080/81722.aspx

Hello, session is a server side concept.
Silverlight runs on the client, so it has no
knowledge of the session. But you can pass some
variable from the Silverlight application to the
server via a web service. Then in the web
service, you store it as a session variable.
Later when you call another web service, you can
check the session variable and return it to the
client.

While WCF also has built-in session
support, BasicHttpBinding doesn't support that.
So you need to use ASP.NET session instead. To
enable ASP.NET session on WCF, you need to turn
on ASP.NET Compatibility. Do the following:



  • In web.config, under system.serviceModel
    tag, add this line:


<serviceHostingEnvironment aspNetCompatibilityEnabled="true"/>



  • On your service class (not interface), add this attribute:


[AspNetCompatibilityRequirements(RequirementsMode = AspNetCompatibilityRequirementsMode.Allowed)]



  • Now you can use ASP.NET session with the
    following syntax:


HttpContext.Current.Session["YourName"] = something;


object something = HttpContext.Current.Session["YourName"];

2008年7月21日 星期一

WCF HTTPS 出現 404 not found 的問題

最近寫了一個Siverlight 的程式 ,使用 WCF 來連接 IIS Server 上的 Service,但我發現如果是連到 http 的service 則一切正常,但是如果是連到https 就會出現 HTTP 404 Not Found 的錯誤 ,經過不斷的嘗試,終於找到答案了,原來是要在Web.config加上 basicHttpBinding 的定義, 定義如下:


<bindings>

        <basicHttpBinding>

        <!-- Configure basicHttpBinding with Transport security -- >

        <!-- mode and clientCredentialType set to None.-->

           <binding name="Binding1">

               <security mode="Transport">

                   <transport clientCredentialType="None"/>

               </security>

           </binding>

        </basicHttpBinding>

    </bindings>


重點是要將 security mode 設成 Transport,這樣使用HTTPS 來連接這個service 就可以正常了,只是原來出現的 HTTP 404 Not Found 的錯誤,真是讓人怎麼想也想不到是這個問題。

2008年7月8日 星期二

FrontPage 如何 刪去列尾的空白


可以使用 Frontpage 本身的 尋找及取代的功能

1.尋找目標設定為 :b*$

2.勾選 規則運算式(X)

3.按下[全部取代(A)] 就可以了

你也可以將這個查詢規則存檔,下次再load回來,就可以重複用囉

2008年7月3日 星期四

線上轉換 c# 程式碼成HTML Code

http://www.manoli.net/csharpformat/

SilverLight 2.0 如何使用網頁上的 ActiveX control

請參考
http://pietschsoft.com/post/2008/06/Silverlight-and-JavaScript-Interop-Basics.aspx



using System;
using System.Collections.Generic;
using System.Linq;
using System.Net;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Animation;
using System.Windows.Shapes;
using System.Windows.Browser;

namespace DiggSample
{
public partial class Page : UserControl
{
public Page()
{
InitializeComponent();
}

private void Button_Click(object sender, RoutedEventArgs e)
{

}

private void MyButton_Click(object sender, RoutedEventArgs e)
{
MyButton.Content = "按到了!" + DateTime.Now.ToLongTimeString();
//HtmlPage.Window.Alert(HtmlPage.Document.GetElementById("XCsp").version2);
ScriptObject myScriptObject = (ScriptObject) HtmlPage.Window.Eval("XCsp;");
if (myScriptObject != null)
{
HtmlPage.Window.Alert((string)myScriptObject.GetProperty("Version2"));
double bRdrReady = (double)myScriptObject.Invoke("ConnectReader");
if (bRdrReady == 0)
{
myScriptObject.Invoke("ListReaders");
double totalReaders = (double)myScriptObject.GetProperty("inor");
if (totalReaders > 0)
{
for (int i = 0; i < totalReaders; i++)
{
ReaderList.Items.Add(myScriptObject.GetProperty("caReader"+(i+1).ToString()));
}
}
else
{
HtmlPage.Window.Alert("請安裝讀卡機");
}
}
else
{
HtmlPage.Window.Alert("bRdrReader=" + bRdrReady.ToString());
}
}

}
}
}

2008年6月25日 星期三

縮小 UpdatePanel JavaScript size

使用 asp.net 的 UpdatePanel 時, 需要一併引用 ScriptManager 這個Control ,這個Control 有一個 [ScriptMode] 的屬性,如果要讓 AJAX 的 JavaScript size 變小,可以將ScriptMode的值設成Release,這樣可以將MicrosoftAjax.js 的大小從 324KB 戲劇化的變成 88.1KB

2008年6月18日 星期三

SCARD Error to Value

Table 1 – SCARD Error to Value
Error Code Hexadecimal Value
SCARD_F_INTERNAL_ERROR 80100001
SCARD_E_CANCELLED 80100002
SCARD_E_INVALID_HANDLE 80100003
SCARD_E_INVALID_PARAMETER 80100004
SCARD_E_INVALID_TARGET 80100005
SCARD_E_NO_MEMORY 80100006
SCARD_F_WAITED_TOO_LONG 80100007
SCARD_E_INSUFFICIENT_BUFFER 80100008
SCARD_E_UNKNOWN_READER 80100009
SCARD_E_TIMEOUT 8010000A
SCARD_E_SHARING_VIOLATION 8010000B
SCARD_E_NO_SMARTCARD 8010000C
SCARD_E_UNKNOWN_CARD 8010000D
SCARD_E_CANT_DISPOSE 8010000E
SCARD_E_PROTO_MISMATCH 8010000F
SCARD_E_NOT_READY 80100010
SCARD_E_INVALID_VALUE 80100011
SCARD_E_SYSTEM_CANCELLED 80100012
SCARD_F_COMM_ERROR 80100013
SCARD_F_UNKNOWN_ERROR 80100014
SCARD_E_INVALID_ATR 80100015
SCARD_E_NOT_TRANSACTED 80100016
SCARD_E_READER_UNAVAILABLE 80100017
SCARD_P_SHUTDOWN 80100018
SCARD_E_PCI_TOO_SMALL 80100019
SCARD_E_READER_UNSUPPORTED 8010001A
SCARD_E_DUPLICATE_READER 8010001B
SCARD_E_CARD_UNSUPPORTED 8010001C
SCARD_E_NO_SERVICE 8010001D
SCARD_E_SERVICE_STOPPED 8010001E
SCARD_E_UNEXPECTED 8010001F
SCARD_E_ICC_INSTALLATION 80100020
SCARD_E_ICC_CREATEORDER 80100021
SCARD_E_UNSUPPORTED_FEATURE 80100022
SCARD_E_DIR_NOT_FOUND 80100023
SCARD_E_FILE_NOT_FOUND 80100024
SCARD_E_NO_DIR 80100025
SCARD_E_NO_FILE 80100026
SCARD_E_NO_ACCESS 80100027
SCARD_E_WRITE_TOO_MANY 80100028
SCARD_E_BAD_SEEK 80100029
SCARD_E_INVALID_CHV 8010002A
SCARD_E_UNKNOWN_RES_MNG 8010002B
SCARD_E_NO_SUCH_CERTIFICATE 8010002C
SCARD_E_CERTIFICATE_UNAVAILABLE 8010002D
SCARD_E_NO_READERS_AVAILABLE 8010002E
SCARD_E_COMM_DATA_LOST 8010002F
SCARD_W_UNSUPPORTED_CARD 80100065
SCARD_W_UNRESPONSIVE_CARD 80100066
SCARD_W_UNPOWERED_CARD 80100067
SCARD_W_RESET_CARD 80100068
SCARD_W_REMOVED_CARD 80100069
SCARD_W_SECURITY_VIOLATION 8010006A
SCARD_W_WRONG_CHV 8010006B
SCARD_W_CHV_BLOCKED 8010006C
SCARD_W_EOF 8010006D
SCARD_W_CANCELLED_BY_USER 8010006E

Table 2 - SCARD Error Text Description
Text Description
SCARD_E_BAD_SEEK An error occurred in setting the smart card file object
pointer.
SCARD_E_CANCELLED The action was canceled by a SCardCancel request.
SCARD_E_CANT_DISPOSE The system could not dispose of the media in the
requested manner.
SCARD_E_CARD_UNSUPPORTED The smart card does not meet minimal requirements
for support.
SCARD_E_CERTIFICATE_UNAVAILABLE The requested certificate could not be obtained.
SCARD_E_COMM_DATA_LOST A communications error with the smart card has been
detected.
SCARD_E_DIR_NOT_FOUND The specified directory does not exist in the smart
card.
SCARD_E_DUPLICATE_READER The reader driver didn’t produce a unique reader
name.
SCARD_E_FILE_NOT_FOUND The specified file does not exist in the smart card.
SCARD_E_ICC_CREATEORDER The requested order of object creation is not
supported.
SCARD_E_ICC_INSTALLATION No primary provider can be found for the smart card.
SCARD_E_INSUFFICIENT_BUFFER The data buffer for returned data is too small for the
returned data.
SCARD_E_INVALID_ATR An ATR string obtained from the registry is not a valid
ATR string.
SCARD_E_INVALID_CHV The supplied PIN is incorrect.
SCARD_E_INVALID_HANDLE The supplied handle was invalid.
SCARD_E_INVALID_PARAMETER One or more of the supplied parameters could not be
properly interpreted.
SCARD_E_INVALID_TARGET Registry startup information is missing or invalid.
SCARD_E_INVALID_VALUE One or more of the supplied parameter values could
not be properly interpreted.
SCARD_E_NO_ACCESS Access is denied to the file.
SCARD_E_NO_DIR The supplied path does not represent a smart card
directory.
SCARD_E_NO_FILE The supplied path does not represent a smart card
file.
SCARD_E_NO_MEMORY Not enough memory available to complete this
command.
SCARD_E_NO_READERS_AVAILABLE No smart card reader is available.
SCARD_E_NO_SERVICE The smart card resource manager is not running.
SCARD_E_NO_SMARTCARD The operation requires a smart card but no smart
card is currently in the device.
SCARD_E_NO_SUCH_CERTIFICATE The requested certificate does not exist.,
SCARD_E_NOT_READY The reader or card is not ready to accept commands.
SCARD_E_NOT_TRANSACTED An attempt was made to end a non-existent
transaction.
SCARD_E_PCI_TOO_SMALL The PCI receive buffer was too small.
SCARD_E_PROTO_MISMATCH The requested protocols are incompatible with the
protocol currently in use with the card.
SCARD_E_READER_UNAVAILABLE The specified reader is not currently available for use.
SCARD_E_READER_UNSUPPORTED The reader driver does not meet minimal
requirements for support.
SCARD_E_SERVICE_STOPPED The smart card resource manager has shut down.
SCARD_E_SHARING_VIOLATION The smart card cannot be accessed because of other
outstanding connections.
SCARD_E_SYSTEM_CANCELLED The action was canceled by the system, presumably
to log off or shut down.
SCARD_E_TIMEOUT The user-specified timeout value has expired.
SCARD_E_UNEXPECTED An unexpected card error has occurred.
SCARD_E_UNKNOWN_CARD The specified smart card name is not recognized.
SCARD_E_UNKNOWN_READER The specified reader name is not recognized, reader
maybe disconnected.
SCARD_E_UNKNOWN_RES_MNG An unrecognized error code was returned from a
layered component.
SCARD_E_UNSUPPORTED_FEATURE This smart card does not support the requested
feature.
SCARD_E_WRITE_TOO_MANY An attempt was made to write more data than would
fit in the target object.
SCARD_F_COMM_ERROR An internal communications error has been detected.
SCARD_F_INTERNAL_ERROR An internal consistency check failed.
SCARD_F_UNKNOWN_ERROR An internal error has been detected, but the source is
unknown.
SCARD_F_WAITED_TOO_LONG An internal consistency timer has expired.
SCARD_P_SHUTDOWN The operation has been aborted to allow the server
application to exit.
SCARD_S_SUCCESS No error was encountered.
SCARD_W_CANCELLED_BY_USER The action was cancelled by the user.
SCARD_W_CHV_BLOCKED The card cannot be accessed because the maximum
number of PIN entry attempts has been reached.
SCARD_W_EOF The end of the smart card file has been reached.
SCARD_W_REMOVED_CARD The smart card has been removed, so that further
communication is not possible.
SCARD_W_RESET_CARD The smart card has been reset, so any shared state
information is invalid.
SCARD_W_SECURITY_VIOLATION Access was denied because of a security violation.
SCARD_W_UNPOWERED_CARD Power has been removed from the smart card, so that
further communication is not possible.
SCARD_W_UNRESPONSIVE_CARD The smart card is not responding to a reset.
SCARD_W_UNSUPPORTED_CARD The reader cannot communicate with the card, due to
ATR string configuration conflicts.
SCARD_W_WRONG_CHV The card cannot be accessed because the wrong PIN
was presented.

2008年6月13日 星期五

ASP AJAX 以及中文亂碼解決方案

1.Server端的 ASP 加上

Response.Charset="UTF-8"
Session.CodePage = 65001

2. Client 端的參數如果有中文 要先用 encodeURI ,將中文encode

3.如果要用JSON來傳給Client,可以使用 下面這個網站開發的 JSON class

http://www.webdevbros.net/2007/04/26/generate-json-from-asp-datatypes/

4. 這個網站的作者也有開發 ajaxed - free classic ASP Ajax Library (VBScript)
http://www.webdevbros.net/ajaxed/

2008年5月20日 星期二

在GridView RowDataBound 如何取得不存在GridView 內的欄位資料

實務上我們不會每次都將 DataSource 所有的欄位顯示在 GridView 裡面,但當我們需要的欄位不在GridView 上時,要如何去取得這個欄位的值呢?
答案就是在GridView RowDataBound 這個 event 傳進來的 GridViewRowEventArgs e 這個 Object:

protected void GridView1_RowDataBound(object sender, GridViewRowEventArgs e)

{

if (e.Row.RowType == DataControlRowType.DataRow)

{



//object refundAmt = DataBinder.Eval(e.Row.DataItem, "RefundAmt");

int refundAmt = ((usp_select_NetATM_logby_TransNoResult1)e.Row.DataItem).RefundAmt;



if (refundAmt > 0)

{

object OrderInfo = e.Row.FindControl("OrderInfo");

if (OrderInfo != null)

{

((Label)OrderInfo).Text += "
";

}

object RefundDetailLink = e.Row.FindControl("RefundDetailLink");

if (RefundDetailLink != null)

{



((HyperLink)RefundDetailLink).NavigateUrl = "javascript:MM_openBrWindow('RefundDetail.aspx?TransNo=" + e.Row.Cells[2].Text.TrimEnd() + "','NewWindow','width=850,height=600,toolbar=no, menubar=no,location=no')";

((HyperLink)RefundDetailLink).Text = "(已執行退費與沖正)";

}
}


e.Row.DataItem 會存放原始DataSource 作 row databound 的資料,所以可以從這裡取的你要的欄位值,要注意的是這個DateItem 的Type 是根據你原來的DataSource而定的,所以你需要事先知道,然後轉型才可以用,偷懶一點的寫法是用DataBinder.Eval 這個Method,由.Net幫你作轉型, 只是這個方法會用到reflection 的機制,遇到大量的資料時,可能會有效能上的問題。

請參考
http://weblogs.asp.net/rajbk/archive/2004/07/20/what-s-the-deal-with-databinder-eval-and-container-dataitem.aspx

2008年4月1日 星期二

修改 ASP.NET culture 設定



GridView 在顯示日期時間欄位時,如果IIS是在英文的OS上,那會顯示成 MM/dd/yyyy hh:mm:ss AM 的格式,如果要顯示出中文的日期欄位,可以在 IIS 的 ASP.NET 頁籤設定,如下圖所示:




2008年3月28日 星期五

Using Nullable Types

http://msdn2.microsoft.com/en-us/library/2cf62fcy(VS.80).aspx
Examples of Nullable Types

Any value type may be used as the basis for a nullable type. For example:

int? i = 10;
double? d1 = 3.14;
bool? flag = null;
char? letter = 'a';
int?[] arr = new int?[10];

2008年3月26日 星期三

如何取得Gridview 隱藏欄位的值

在某些時候,我們會想利用Gridview的欄位來放Postback後要用到的資料,但又不想讓這些欄位顯示出來,這時候你可以在 GridView1_RowCreated 這個event,將這些欄位的visible 設成 false,如此在 Postback 時就可以取得這些欄位的值,範例如下:

if ((e.Row.RowType == DataControlRowType.Header e.Row.RowType == DataControlRowType.DataRow) && e.Row.Cells.Count>11)
{
e.Row.Cells[8].Visible = false;
e.Row.Cells[9].Visible = false;
e.Row.Cells[10].Visible = false;
e.Row.Cells[11].Visible = false;
}

  1. 注意:不可以在Design time時將這些欄位的Visible設成false,因為這樣你會取得空值。
  2. asp.net會將這些欄位值放在viewstate內,所以如果有些資料是不能給User看到的,就不適合這樣作,如果一定要,那你就必須將viewstate 加密。

asp.net viewstat decoder

http://www.pluralsight.com/tools.aspx

ViewState Decoder (2.2)

Fritz OnionTool to decode the ViewState in ASP.NET 2.0 pages. This version supports display of control state as well as view state. Screenshot

ViewState Decoder (1.1)

Fritz OnionTool to decode the ViewState in ASP.NET pages compatible with version 1.1 of ASP.NET Screenshot

http://blogs.msdn.com/rextang/archive/2007/05/25/2868250.aspx

2008年3月20日 星期四

asp.net forms authentication Web.Config 範例

如果某一個aspx網頁不需要驗證就可以存取,可以在web.config 加上Location 這個標籤

<configuration>
<system.web>
<authentication mode="Forms" >
<forms loginUrl="login.aspx" name=".ASPNETAUTH" protection="None" path="/" timeout="20" >
</forms>
<
/authentication>
<!-- This section denies access to all files in this application except for those that you have not explicitly specified by using another setting. -->
<authorization>
<deny users="?" />
</authorization>
<
/system.web>
<!-- This section gives the unauthenticated user access to the Default1.aspx page only. It is located in the same folder as this configuration file. -->
<location path="default1.aspx">
<system.web>
<authorization>
<allow users ="*" />
</authorization>
<
/system.web>
</location>
<!-- This section gives the unauthenticated user access to all of the files that are stored in the Subdir1 folder. -->
<location path="subdir1">
<system.web>
<authorization>
<allow users ="*"
/>
</authorization>
<
/system.web>
</location>
<
/configuration>

2008年2月25日 星期一

如何在 client 端 動態修改 Custom Validator 的 error message

有User的需求是希望能用alert的方式顯示出 validator 的 錯誤訊息, Validation Summary 有一個「ShowMessageBox」property 剛好可以提供這樣的功能,但是如果你的Page上有包含 Custom Validator , 而 Custom Validator的錯誤訊息會依據不同的條件顯示的話,如何在 client 動態修改 Custom Validator 的 error message呢?

重點就是要修改 Custom Validator Client script 的 sender dom 物件,說明如下:

function fn_myValidator(sender, args)
{
sender.innerHTML = "錯誤:" + new Date().toLocaleString();
sender.errormessage = "錯誤:" + new Date().toLocaleString();
args.IsValid = false;
}

ASP.net 會將 Custom Validator render 成一個 DOM object,其中的 errormessage 屬性就是validation summary control 顯示時會去讀的資料,因此只要在Custom Validator Client script改變這個值,validation summary就會Show 出新的 error message,但是如果你希望改變Custom Validator 本身顯示在 網頁上的 error message , 就需要修改 Custom Validator 的 innerHTML or innerText。

可以參考以下兩串討論

2008年2月4日 星期一

消失的IIS ASP.NET Tab(頁籤)

在Windows 2003 Server 上的 IIS ASP.NET Tab , 有時會莫名的失蹤,解決方法如下
http://jamesmckay.net/2008/01/missing-aspnet-tab-in-iis-on-windows-server-2003/
  1. Stop IIS using iisreset /stop
  2. Open the file C:\WINDOWS\system32\inetsrv\MetaBase.xml in Notepad.
  3. Find and delete the line that says Enable32BitAppOnWin64="TRUE"
  4. Restart IIS using iisreset /start
  5. If you still don’t see your ASP.NET tab, aspnet_regiis -i should now work.
另外也可以用

ASP.NET Version Switcher


來取代