標籤

ASP.NET MVC (29) Visual C# (15) JQuery (10) Plugins (8) JQuery Plugins (6) JavaScript (6) MySQL (5) CSS (4) LinQ (4) Mac OS (4) CentOS (3) Design Pattern (3) Entity Framework (3) IIS (3) Python (3) Windows (3) php (3) Docker (2) LAMP (2) SQL Server (2) WCF (2) .NET (1) .NET Core (1) AWS (1) Browser (1) GIS (1) IE (1) Internet Security (1) Linux (1) Platform (1) React (1) SEO (1) Testing (1) VMware (1) Windows 7 (1) cookie (1) curl (1) laravel (1) phpBB (1) session (1) 中古屋 (1) 透天 (1) 閒言閒語 (1) 面試 (1) 鳥松 (1)

2011年11月10日 星期四

[JavaScript] function statement requires a name

function statement requires a name
---

在ASP MVC中使用 Ajax:
@Ajax.ActionLink("刪除", "Delete", new { id = item.Id },
new AjaxOptions()
{
HttpMethod= "Delete",
Confirm="你確定要刪除嗎?",
OnSuccess = "function() { alert('hello'); }"
})

改為下面這樣就好了:
OnSuccess = "(function() { alert('hello'); })()"

Reference :

Javascript anonymous functions in Firefox 7

2011年11月9日 星期三

伺服器 '' 上的 MSDTC 無法使用。

昨天懶得重開電腦,就直接休眠了,結果今天早上run程式的時候就發生這個錯誤:

'/' 應用程式中發生伺服器錯誤。

伺服器 'XX\SQL2008R2' 上的 MSDTC 無法使用。

描述: 在執行目前 Web 要求的過程中發生未處理的例外情形。請檢閱堆疊追蹤以取得錯誤的詳細資訊,以及在程式碼中產生的位置。

例外詳細資訊: System.Data.SqlClient.SqlException: 伺服器 'XX\SQL2008R2' 上的 MSDTC 無法使用。

原始程式錯誤: ...

---
後來發現是 Distributed Transaction Coordinator (MSDTC) 這個服務停止了,所以只要有包含交易(Transaction)的區段都會出錯,把服務重新啟動一次就好囉。


2011年10月17日 星期一

[LinQ] 將多個判斷條件合併,使用And或Or

我希望可以使用And與Or來合併LinQ語法中的判斷式,例如:



//名稱包含關鍵字
Expression< Func< Models.Product, bool>> productNameContainsKeyword =
c => c.Name.Contains(input.Keyword);

//價格大於多少
Expression< Func< Models.Product, bool>> productPriceMoreThan =
c => c.Price >= priceFrom.Value;

//兩個條件And
var result = (from s in contex.ProductSet.Where(
productDecriptContainsKeyword.And(productPriceMoreThan)
)


Cool~



很好玩的實作方式:

[ASP.NET MVC] 定義自訂欄位驗證屬性並且在clinet端驗證

perform the client side validation for custom attribute

欄位自己驗證,不須其他欄位,看這個:


驗證中必須含有其他欄位,很不錯的解答:

---


2011年10月16日 星期日

[ASP.NET MVC] 快取( Cache ) 的機制

MVC 中有內建屬性可以控制是否要再Client端作cache,也有Server-cache的機制,如果我們是某個partialView要快取在server,則直接在Action上使用:
[System.Web.Mvc.OutputCache(Duration = 60)]


或者直接操作比較底層的東西:


---
保哥這篇很棒:


[GIS] 何謂TWD67 / 97 、WGS84、TM2

TWD67 / 97 、WGS84 是大地基準(Datum)

TM2 : 二度分帶 是指大地座標系統

座標有分為經緯度座標( 立體地球 ),以及平面座標 ( UTM )等,

而平面座標示由立體投影而來,以2D(平面)畫3D(立體),那就一定會有失真問題。

一些不錯的資訊:





[Entity Framework] 取得某個Model欄位之Display Name

有時間再來整理,stack overflow上有人有寫出用強型別取得的方法








2011年10月11日 星期二

[LinQ] 判斷SQL Server中可NULL的欄位

假設SQL Server某張表叫做TestSet,其中包含兩個int欄位:Id與MemberId,MemberId為可空(Nullable),所以如果我要抓出所有MemberId是NULL值的話使用下列方式:


SELECT [Id]
,[MemberId]
FROM [TestSet]
Where [MemberId] IS NULL
GO




一開始想到使用LinQ下列方式,結果是行不通的:



int? memberid= null;
var reasult = contex.TestSet.Where(s => s.MemberId == memberid);




似乎要直接在LinQ查詢語句中直接給null值判定才行:



var reasult = contex.TestSet.Where(s => s.MemberId == null);



2011年9月29日 星期四

[LinQ] 確定LinQ的預設值(FirstOrDefault DefaultIfEmpty)

var result = (...).FirstOrDefault();
if( result != null )
{
...
}


有時候我常常為了判斷result到底有沒有結果煩惱,到底甚麼時候是null,甚麼時候是預設值?
如果用下面的方法就簡單多了:

var defaultValue = default(List);
if( result != defaultValue )
{
...
}



2011年9月23日 星期五

[JQuery] Jquery 常用操作

1. 某個Table除了第一列資料,其餘列全部清除:


$(document).ready(function() {
$("someTableSelector").find("tr:gt(0)").remove();
});




[Plugins] SWFUpload 動態指定Post參數

因為專案中每次上傳都有可能有不同的Post參數,查了一下官方文件,有【addFileParam()】這個好用的方法,但是這個方法似乎無法從外部呼叫,參考了一下網路其他文章,可以修改handlers.js中【function uploadStart(file) {}】函數來呼叫【addFileParam()】方法。

一個post參數名稱為"pId",值為2的範例:

function uploadStart(file) {
try {
this.addFileParam(file.id, "pId", "2");
var progress = new FileProgress(file, this.customSettings.progressTarget);
progress.setStatus("上傳中...");
progress.toggleCancel(true, this);
}
catch (ex) { }
return true;
}





Reference:

2011年9月19日 星期一

[ASP.NET MVC] 在View中使用預設的客戶端驗證

Using the client side validation in ASP.NET MVC3 without Model.
---
我既想要使用ASP.NET MVC的客戶端驗證,但是我又不想綁定資料模型,其實很簡單,只需將每個想要驗證的加上以下屬性:
  • data-val = true
  • data-val-(required|regex|range|equalto|remote|length|number)="顯示的錯誤訊息"

然後除了require不用規則,其他規則根據下列來加入:
  • data-val-regex-pattern
  • data-val-range-min
  • data-val-range-max
  • data-val-equalto-other
  • data-val-remote-url
  • data-val-remote-type
  • data-val-remote-additionalfield
  • data-val-length-min
  • data-val-length-max
例如我有個input名稱叫做keyword,他是屬於必要項目,那設定如下:
<input id="keyword" type="text" value="" name="keyword" data-val-required="關鍵字欄位為必要項。" data-val="true">

*注意true不能大寫為True

---
當然View中該引用的東西還是得引用:
1. 下面兩個js檔案
"~/Scripts/jquery.validate.min.js",
"~/Scripts/jquery.validate.unobtrusive.min.js"

2. @Html.BeginForm內部要加上:@Html.ValidationSummary(true)

---
Reference:



[Entity Framework] 發生 錯誤0019: EntityContainer名稱必須唯一

錯誤訊息: 錯誤0019: EntityContainer名稱必須唯一

error 0019: The EntityContainer name must be unique

--
因為將有包含Model的類別全數移動到另一個ClassLiberary專案,結果運行的時候發生上述錯誤,上網查找後,有可能的原因為:
1. 參考的不同命名空間中有兩個名稱相同的EntityContainer(*.edmx)。
2. 將專案bin目錄中所有dll與pdb完全清除,並且重新編譯。

Reference:




2011年9月15日 星期四

[MySQL] 還原資料庫時發生錯誤 Incorrect string value for column 'blahblahblah' at row 1

起因是要從某個 *.sql 的檔案還原至本機的MySQL Server,指令如下:
mysql -u root -p crazyshop1 -P 3306 < db_XXXX.sql

錯誤訊息如下:

Google一下發現應該是編碼沒有設定為UFT-8的關係:

於是在MySQL Workbench中設定,但是不管是使用AfterTable方式還是設定預設值,都無法排除錯誤:
最後經理在還原指令中指定預設編碼,就搞定收工了~
mysql --default-character-set utf8 -u root -p -P 3307 crazyshop < db_XXXX.sql

看來完全不懂MySQL,要加油了~

2011年9月14日 星期三

[Windows 7]運行程式發生AppCrash


因為Vista之後有所謂的資料執行防止機制(DEP),如果想關閉此功能,

可以在開始->執行輸入"SystemPropertiesAdvanced.exe",

[進階]標籤 -> [效能]中點選[設定(S)...],在標籤[資料執行防止]中加入會Appcrash程式的路徑,



大功告成~

2011年9月5日 星期一

[ASP.NET MVC] 如何在View中 Post List型別的參數給Controoler

方法很簡單,只要把對應的input name設定成陣列的型態就可以了,範例:










[HttpPost]
public ActionResult PrintBarcode( List< Models.test > cmd)
{
...
}
class Test{
public long ProductId { get; set; }
public int Quantity { get; set; }
}


Post時候參數如果透過JQuery,則可以直接把form給序列化: $('#formId').serialize()



Reference:http://kristofmattei.be/2009/10/19/asp-net-mvc-model-binding-to-a-list/http://blog.gfader.com/2010/05/aspnet-mvc-model-binding-to-list-or-how.html

2011年9月4日 星期日

[JQuery] 檢查上傳檔案的附檔名

Check the extension file name for < input type="file" >

範例長這樣子:

由於檔案名稱在使用者選擇後我們是不能修改的(安全性問題),所以我們可以整段HTML替換,這是其中一種方式,個人覺得還不錯~


    //檢查Ext副檔名

function CheckExtensionMusic() {
var type = /(.mp3|.MP3|.mP3|.Mp3)$/i;
if (!type.test($(".fileToUploadMusic").val())) {
$(".fileToUploadMusic").replaceWith("");
}
else {
}
}

2011年9月1日 星期四

[WCF] 小筆記

Per Session 只要同個Session 只建一個Thread 去服務.
Per Call 他就不管你的訊息從哪裡來,每個Request 都建一個Thread 去服務.
Per Singleton 全部Request 都用同一個Thread服務.

只有在特殊情況,所有呼叫Service-Host的client端,都必須使用同一個硬體或是其它需求者,或是分享企業邏輯者,才會只用Single (可以參考Design Pattern中的Singleton )
http://stackoverflow.com/questions/1756487/should-wcf-service-typically-be-singleton-or-not


--
3種方式可以裝載WCF Service: 1. Windows Service 2. IIS 3.
[其實高興的話,也可以用WindowsForm,或是Console App].

--
MEX 有 Request/Replay ,OneWay 跟 Call Back 方式,看你的需求.

出現鎖死 [ServiceBehaviorAttribute.ConcurrencyMode]
詳解:http://softtechhelp.blogspot.com/2010/08/wcf-6service-behavior-concurrencymode.html
解法:http://www.switchonthecode.com/tutorials/wcf-callbacks-hanging-wpf-applications

對於三種ConcurrencyMode,有個中國網站解釋的不錯:




[WCF] 實作WCF時 出現"無法載入指定的中繼資料資源"

起因是因為WCF Service中使用了Entity Framework,但是實作服務的專案並沒有加入相對應的連線字串,以及引用System.Entity,可參考保哥這裡的作法:

2011年8月25日 星期四

[ASP.NET MVC] 自訂模型繫結 (Custom Model Binder)

我想在ASP MVC中,是必須要了解的部分,尤其是"日期時間"資料型態應該是我們第一個會遇到的問題,關於日期時間:
http://www.hanselman.com/blog/SplittingDateTimeUnitTestingASPNETMVCCustomModelBinders.aspx

Stack Overflow也有:
較簡單的範例

有時間再來寫實際實作過程...



2011年8月22日 星期一

[JQuery] Json 資料放到select option 使用 Jquery



//使用Ajax取得Json格式的資料 格式為 List
$.ajax({
type: 'GET',
url: GetUrl,
data: { id: id },
dataType: "json",
success: function (data) {
$("#selectId").fillSelect(data);
}
});


//清除選取的下拉清單
$.fn.clearSelect = function() {
return this.each(function() {
if (this.tagName == 'SELECT')
this.options.length = 0;
});
}

//將下拉選項加入下拉清單
$.fn.fillSelect = function (data, selectId) {
return this.clearSelect().each(function () {
if (this.tagName == 'SELECT') {
var dropdownList = this;
$.each(data, function (index, optionData) {
var option = new Option(optionData.Text, optionData.Value);
if ($.browser.msie) {
dropdownList.add(option);
}
else {
dropdownList.add(option, null);
}
});
}
});
}




Reference:

[LinQ] LinQ To Entity 中 將int轉換為string

只要這樣做就可以了:

var items = from c in contacts

select new ListItem
{
Value = SqlFunctions.StringConvert((double)c.ContactId),
Text = c.Name
};
如果還有空白的問題 可以在Convert後加上.Trim()

Reference:

2011年8月9日 星期二

[Visual C#] 從MySQL轉換datetime欄位至SQL Server

在.NET中 Datetime欄位的範圍不用討論了,但是在SQL Server卻有分成datetime2 與 datetime,其中Datetime的範圍為1753~9999年datetime2 的範圍為0000/1/1~9999/12/31。

如果Entity Framework中使用的是Datetime,則是對應到SQL Server的datetime,這時候時間超出範圍就會丟出錯誤:將 datetime2 資料類型轉換成 datetime 資料類型時,產生超出範圍的值。陳述式已經結束。

解決方式:
1. 使用datetime,但是寫入時要檢查時間範圍,如果需要往前相容只能這樣。
2. 直接使用datetime2。



2011年8月1日 星期一

[CSS] IE6 IE7 Inline-block 的問題

只需在已經套用Inline-block的CSS區段中加入以下兩行即可,缺點是這兩行並不符合CSS標準,(CSS hack):

*zoom:1;/*IE6 and IE7 hack*/
*display:inline;/*IE6 and IE7 hack*/

2011年7月28日 星期四

[Office] Excel中如何使用VBA快速尋找sheet

1. Excel2010 開啟巨集功能 : http://www.dotblogs.com.tw/chou/archive/2010/04/19/14690.aspx

2. 加個按鈕,執行下列程式碼:





Dim sh As Worksheet
Dim Message, Title, Default, MyValue
Message = "輸入查詢工作表名稱" ' 設定提示訊息。
Title = "查詢工作表名稱" ' 設定標題。
'Default = "1" ' 設定預設值。
ShSearch = InputBox(Message, Title, Default)
If ShSearch = "" Then Exit Sub

Application.ScreenUpdating = False
Application.DisplayAlerts = False

For Each sh In Sheets
If sh.Name <> "控制" Then
If InStr(1, sh.Name, ShSearch, 1) = 0 Then
' MsgBox sh.Name & " - " & InStr(1, sh.Name, ShSeek, 1)
' sh.Visible = xlSheetVeryHidden
'隱藏工作表: Sheet1.Visible = xlSheetVeryHidden
'顯示工作表: Sheet1.Visible = xlSheetVisible
Else
Msg = "你要到該工作表嗎? - " & sh.Name ' 定義訊息。
Style = vbYesNo + vbCritical + vbDefaultButton2 ' 定義按鈕。
Title = "查詢工作表名稱" ' 定義標題。
' Help = "DEMO.HLP" ' 定義說明檔。
' Ctxt = 1000 ' 定義內容代碼。
' 顯示訊息。
Response = MsgBox(Msg, Style, Title, Help, Ctxt)
If Response = vbYes Then ' 若使用者按下 [是]。
MyString = "Yes" ' 產生相對回應。
Sheets(sh.Name).Select
Exit Sub
Else ' 若使用者按下 [否]。
MyString = "No" ' 產生相對回應。
End If

End If
End If
Next
Application.DisplayAlerts = True
Application.ScreenUpdating = True
'MsgBox "完成"


2011年6月7日 星期二

[ASP.NET MVC] 如何在主版頁面(Masterpage)中加入固定標題(Tilte)-續

之前寫了一篇:http://maidot.blogspot.com/2011/03/aspnet-mvc-masterpagetilte.html


如果我們希望Title是動態產生的該怎麼辦?其實很簡單,只需要:
< title>
< asp:ContentPlaceHolder ID="TitleContent" runat="server" />
<%: System.Web.Configuration.WebConfigurationManager.AppSettings["SiteTile"] %>
< /title>


沒錯,就是這樣簡單明瞭,其實如果使用Razor View是不會有任何問題的。

Reference:http://stackoverflow.com/questions/6291131/how-to-set-the-global-text-of-title-in-site-master-page-using-asp-net-mvc-2-3


====[以下為舊資料,請勿參考]====
現在發現如果要這樣搞:
   < title>
< asp:ContentPlaceHolder ID="TitleContent" runat="server" />
< asp:Literal ID="ltlTitleBack" runat="server" Text='<%: System.Web.Configuration.WebConfigurationManager.AppSettings["SiteTile"] %>' >
< /title>

是行不通的,它會顯示< asp:Literal不能包含子控制項,不過我找到一個可行的解決方案,但不知道是不是最好的:http://weblogs.asp.net/infinitiesloop/archive/2006/08/09/The-CodeExpressionBuilder.aspx

需要將Site.Master的程式碼改為:
   < title>
< asp:ContentPlaceHolder ID="TitleContent" runat="server" />
< asp:Literal ID="ltlTitleBack" runat="server" Text='<%$ Code: System.Web.Configuration.WebConfigurationManager.AppSettings["SiteTile"] %>' >
< /title>


然後某個Class中加入
using System.Web.Compilation;
using System.CodeDom;
using System.Web.UI;
//修正Literal
[System.Web.Compilation.ExpressionPrefix("Code")]
public class CodeExpressionBuilder : ExpressionBuilder
{
public override CodeExpression GetCodeExpression(BoundPropertyEntry entry,
object parsedData, ExpressionBuilderContext context)
{
return new CodeSnippetExpression(entry.Expression);
}
}


最後在Web.config中的區段中加入下列程式碼:
     

2011年6月3日 星期五

[ASP.NET MVC] 在View中取得目前的Controller, Action 的名稱

MVC3使用方式:
ViewContext.Controller.ValueProvider.GetValue("action").RawValue

ViewContext.Controller.ValueProvider.GetValue("controller").RawValue
ViewContext.Controller.ValueProvider.GetValue("id").RawValue

MVC2:
ViewContext.Controller.ValueProvider["action"].RawValue
ViewContext.Controller.ValueProvider["controller"].RawValue

ViewContext.Controller.ValueProvider["id"].RawValue

Reference:

ASP.NET MVC - Current Action