<p>原來預計是想上一篇就把它寫完的(應該是審視一下程式碼以後,發現重複的地方太高了),不過感覺還是有點長(賺篇幅),就在這一篇繼續把它寫完吧。</p>
<p>6. 字串與時間的處理:最常用到的應該是DateTime.Parse(),不過大家都知道,不要想預期的字串一定會進來(笑),然後就會System.ArgumenException摟。在不想做try-catch的方式下,其實還有很多method可以選擇:DateTime.ParseExact(),這個可以handle沒法轉換的情況,DateTime.TryParseExact()除了有ParseExact()的錯誤處理以外,還可以回傳是否轉換成功,這對於塞資料庫時使用參數傳遞的方式,當轉換錯誤時會有參數錯誤的情形,可以有個解套。</p>
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 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71
| IFormatProvider ifp = new CultureInfo("zh-TW", true); ... if (DateTime..TryParseExact(CR.ConfirmResults[0].AuthDate, "yyyyMMddHHmmss", ifp, DateTimeStyles.None, out AuthDate)) sqlcmd.Parameters.AddWithValue("ConfirmDate", AuthDate); else sqlcmd.Parameters.AddWithValue("ConfirmDate", DBNull.Value);```
<p>7\. ASP.Net AJAX Enabled的網頁要做Server-Side Javascript:當在使用ASP.Net AJAX Framework到網頁上,有許多好用的控制項。但是有時候還是想要使用自定的Javascript(如window.open()),可能會使用到Response.Write()送出Server-Side Javascript,會發生下面的錯誤。</p>
<p><img height="122" width="739" src="http://e.blog.xuite.net/e/2/3/2/11844378/blog_1638788/txt/34736652/5.png" border="0" /><br />可以看到大概的意思,不能呼叫類似改變輸出的method。找了一下網路,發現到有解決的<a target="_blank" href="http://yaneshtyagi.blogspot.com/2007/10/redirecting-to-new-window-in-c.html">Solution</a>,相關程式碼如下。&nbsp;</p>
```cs public static class ResponseHelper {
public static void Redirect(string url, string target, string windowFeatures)
{
HttpContext context = HttpContext.Current;
if ((String.IsNullOrEmpty(target) || target.Equals("_self", StringComparison.OrdinalIgnoreCase)) &amp;&amp; String.IsNullOrEmpty(windowFeatures))
{
context.Response.Redirect(url);
}
else
{
Page page = (Page)context.Handler;
if (page == null)
{
throw new InvalidOperationException("Cannot redirect to new window outside Page context.");
}
url = page.ResolveClientUrl(url);
string script;
if (!String.IsNullOrEmpty(windowFeatures))
{
script = @"window.open(""{0}"", ""{1}"", ""{2}"");";
}
else
{
script = @"window.open(""{0}"", ""{1}"");";
}
script = String.Format(script, url, target, windowFeatures);
ScriptManager.RegisterStartupScript(page, typeof(Page), "Redirect", script, true);
}
}
}
|
<p>所以只要呼叫ResponseHelper.Redirect()就能夠跳出新視窗了。</p>
1 2
| ResponseHelper.Redirect("./HTMLPage.htm?STK=" + ret,"_blank", "height=600, width=800, resizable=no, toolbar=no, menubar=no, scrollbars=yes, location=no, status=no");
|
<p>8. 讓有MasterPage的網頁暫時不要有MasterPage:其實這算Dirty Hacking啦,就是根據一定的需求,去改Page.MasterPageFile,做一個是空的MasterPage,動態指定即可。要記得指定MasterPageFile要在Page_PreInit()裡改變,要不然會有錯誤喔。</p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14
| protected void Page_PreInit(object sender, EventArgs e)
{
if (Request.QueryString["CompanyID"] != null || Request.QueryString["ROCID"] != null)
{
Page.MasterPageFile = "~/PaymentMasterPage2.master";
}
}
|
<p>9. 做可以讓GridView的CheckBox全選的方法:這個東西網路上很多,就是要在原GridView設TemplateField,並且把相關的CheckBox放上去。</p>
<p><img height=”256” width=”797” src=”http://e.blog.xuite.net/e/2/3/2/11844378/blog_1638788/txt/34736652/6.png“ border=”0” /></p>
<p>接下來是SelectAllCheckboxes(),寫在網頁的最下方。</p>
<pre class=”brush: jscript;”>function SelectAllCheckboxes(spanChk) {
elm = document.forms[0];
for (i = 0; i < elm.length; i++) {
if (elm[i].type == “checkbox” && elm[i].id != spanChk.id) {
if (elm.elements[i].checked != spanChk.checked)
elm.elements[i].click();
}
}
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20
| <p>Server-Side就可以透過FindControl()來找是不是有被勾選了(當然全選一定會被勾)。</p>
```cs foreach (GridViewRow gvr in GridView1.Rows)
{
chkb = (CheckBox)gvr.FindControl("CheckBox1");
if (chkb.Checked)
{
...
}
}
|
<p>10. 避掉存取其他Web Services時憑證的錯誤:這個的問題是,要存取某些Web Services,但是該Services的IIS憑證是錯的,如果直接用的話,會發生錯誤。當然最好的方法是申請與安裝新的憑證,但是有時候太急的話可能要先處理一下。網路上找呀找,發現我之前就有找過類似的<a target=”_blank” href=”http://blog.xuite.net/retsamsu/diary/29392339">問題</a>了,不過還是分享一下C#的方式。</p>
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
| public static bool ValidateServerCertificate(
object sender,
X509Certificate certificate,
X509Chain chain,
SslPolicyErrors sslPolicyErrors)
{
return true;
}
...
ServicePointManager.ServerCertificateValidationCallback = new RemoteCertificateValidationCallback(ValidateServerCertificate);
MTPGNS = new MTNetPGWS.MTNet小額支付平台WebServices();
...
|
<p>待續…</p>