標籤

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年3月31日 星期四

[JQuery] 在表單中(Form),如何取得多個input欄位的value值?

How to get the value of multiple input fields in the form post
==================
HTML:

<form action="/EditWebSiteLinksPOrderAjax" id="postForm">
<ul id="sortableUL">
<li id="sort_0" class="ui-state-default">

<input id="order0" name="POrder" type="hidden" value="0" />
<input id="WebSiteLinksId" name="WebSiteLinksId" type="hidden" value="2" />
</li>
<li id="sort_1" class="ui-state-default">
<input id="order1" name="POrder" type="hidden" value="1" />
<input id="WebSiteLinksId" name="WebSiteLinksId" type="hidden" value="3" />
</li>
<li id="sort_2" class="ui-state-default">
<input id="order2" name="POrder" type="hidden" value="2" />
<input id="WebSiteLinksId" name="WebSiteLinksId" type="hidden" value="5" />
</li>
<li id="sort_3" class="ui-state-default">
<input id="order3" name="POrder" type="hidden" value="3" />
<input id="WebSiteLinksId" name="WebSiteLinksId" type="hidden" value="6" />
</li>
</ul>
<p>
<input type="submit" value="確定" />
</p>
</form>



【JQuery】:
var $form = $("#postForm");

(1) $form.find('input[name="POrder"]').map(function () { return $(this).attr("value") })
["0", "1", "2", "3"]


(2) $form.find('input[name="POrder"]').serializeArray()
=[Object { name="POrder", value="0"}, Object { name="POrder", value="1"}, Object { name="POrder", value="2"}, Object { name="POrder", value="3"}]

2011年3月30日 星期三

新知網站與好文

我的新知,可能已是您的知識。

[HTML5 Rock]
http://slides.html5rocks.com/#hardware-access-title

[W3C webdatabase]
http://www.w3.org/TR/webdatabase/

========

程式設計師懺情錄


=========

[ASP.NET MVC] Edit資料時View PostBack到Action應該如何驗證資料模型繫結

如果使用 ModelState.IsValid ,假如我們有排除某些欄位時就會變得很麻煩, 故可以使用TryUpdateMode() 。

例如:

public ActionResult Image(string id)
        [HttpPost]
        [ValidateInput(false)] //避免Controller檢查Script攻擊
        public ActionResult EditBoardHonor([Bind(Exclude = "ValidDate,CreateDate")]Models.BoardHonor postback)
        {
            postback.CreateDate = DateTime.Now;
            postback.ValidDate = DateTime.Now;
            using (MvcBodyApp.Models.BodyDBEntities db = new BodyDBEntities())
            {
                var result = (from s in db.BoardHonor where s.BoardHonorId == postback.BoardHonorId select s).FirstOrDefault();
                if (TryUpdateModel(result)) //檢查資料繫結是否正常
                {
                    db.SaveChanges();
                    ViewData["resultMsg"] = String.Format("【{0}】編輯成功", postback.Title);
                    return View(postback);
                }
            }
            ViewData["resultMsg"] = "編輯失敗";
            return View(postback);
        }

2011年3月29日 星期二

[ASP.NET MVC] View的客戶端欄位驗證

ASP NET MVC client validation
======================
ASP.NET MVC 已經幫我們寫好很方便的驗證了,如果我們在產生VIew時使用強型別,則只需要做三件事情:

1. 在View中寫入
<%Html.EnableClientValidation(); %>

2. View中引用三個檔案:

< script type="text/javascript" src="<%= Url.Content("~/Scripts/MicrosoftAjax.js") %>">< /script>
< script type="text/javascript" src="<%= Url.Content("~/Scripts/MicrosoftMvcAjax.js") %>">< /script>
< script type="text/javascript" src="<%= Url.Content("~/Scripts/MicrosoftMvcValidation.js") %>">< /script>

3.在你喜歡的類別定義Entity Model中某個表的MetaData(這裡表為ClassNow)
namespace XX.Models
{
    [MetadataType(typeof(ClassNowMetadata))]
    public partial class ClassNow
    {
        private class ClassNowMetadata
        {
            [Required(ErrorMessage="日期為必要"]
            [RegularExpression(@"^(19|20|21)\d\d[- /.](0[1-9]|1[012])[- /.](0[1-9]|[12][0-9]|3[01])$",ErrorMessage="日期格式錯誤")]
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}")]
            public DateTime Ondate { get; set; }

            [Required(ErrorMessage="名稱為必要")]
            [DisplayName("名稱")]
            public string Name { get; set; }
        }
    }   
}

[ASP.NET MVC] Entity Model 中 DateTime資料型別在View的顯示格式問題

Keyword: ASP MVC TextBoxFor DateTime format
===================================
如果我們的Entity Model資料型態中有DateTime資料型別的欄位,則產生View後會自動產生:
<%: Html.TextBoxFor(model => model.Ondate, String.Format("{0:d}", Model.Ondate))%>
這樣的話產生出來的字串為:2011/3/29 下午 03:18:54

如果我們想自訂日期格式字串,例如只顯示2011/3/29 ,View中無論如何操作都無法變更,唯一的方法是:

1. 先自定義Entity Model中的MeteData


using System.ComponentModel;
using System.ComponentModel.DataAnnotations;

namespace XX.Models
{
    [MetadataType(typeof(ClassNowMetadata))]
    public partial class ClassNow
    {
        private class ClassNowMetadata
        {
            [DisplayFormat(ApplyFormatInEditMode = true, DataFormatString = "{0:yyyy/MM/dd}")]
            public DateTime Ondate { get; set; }
        }
    }  
}

2.在View中使用EditFor
<%: Html.EditorFor(model => model.Ondate)%>

搞定,收工~

2011年3月24日 星期四

[ASP.NET MVC] MVC隨手筆記

1. 輸出純HTML至VIew中
    如果資料庫內保存HTML語法透過Model輸出必須要使用<%= Model.TeacherName %>,而非<%: Model.TeacherName %>

2. 在View中讀取web.cofig
     VIew需引用<%@ Import Namespace = "System.Web.Configuration" %>

     web.config檔案需定義
       <appSettings>
           <add key="DefaultAlbumImage" value="~/Content/images/DefaultAlbumImage.jpg"/>
       </appSettings>
    
    View使用
    <%:  Url.Content(WebConfigurationManager.AppSettings.GetValues("DefaultAlbumImage").First() ) %>

[ASP.NET MVC] 使用JQuery Get Json格式的資料

例如要向伺服端要一串資料來當DropDownList的item

==================

.......View
    <div  id="selectArea"> <!-- 選擇相簿與相片 -->
        <select id="FileImageAb">
        </select>
        <input type="button" onclick="getFileAlbum()" name="btnGet" value="取得" />
    </div>

.......JQuery

    //取得目前所有相簿
    function getFileAlbum() {
        $.getJSON('<%=Url.Content("~/AjaxInfo/GetFileImageAlbumAll")%>', null,
            function (data) {
                $("#FileImageAb").children().remove();
                for (i = 0; i < data.length; i++) {
                    if(i == 0) { //將第一個設給隱藏欄位
                        $("#ClassInfoId").val(data[i].FileImageAlbumId);
                    }
                    $("#FileImageAb").append(
                        $("<option></option>").attr("value",data[i].FileImageAlbumId).text(data[i].FIAName)
                    );
                }
            });
        }

......Controller

        public ActionResult GetFileImageAlbumAll()
        {
            using (DBEntities db = new DBEntities())
            {
                var result = (from s in db.FileImageAlbum select new { s.FileImageAlbumId,s.FIAName }).ToList();
                return  Json(result,JsonRequestBehavior.AllowGet);
            }
        }


==========================================
如果想要依據某個隱藏欄位(id=ClassInfoId)決定目前select(id=selectClassInfoId)的選取項目:



        $.getJSON('<%=Url.Content("~/AjaxInfo/GetClassInfoAll")%>', null,
            function (data) {
                $("#selectClassInfoId").children().remove();
                for (i = 0; i < data.length; i++) {
                    $("#selectClassInfoId").append(
                        $("<option></option>").attr("value", data[i].ClassInfoId).text(data[i].Name)
                    );
                    $("#selectClassInfoId").val($("#ClassInfoId").val()); //將課程Id設定給下拉選單
                }
            });

2011年3月22日 星期二

[ASP.NET MVC] 引用外部檔案時須注意相對位置

本來頁面都是這樣使用
頁面:http://localhost:63121/Manage/Details_FileImageAlbum/1
引用:<img src="../../Content/images/ajax-loader.gif" />

可是這樣如果頁面變成
http://localhost:63121/Manage/Details_FileImageAlbum/1/2的話就死掉了,

所以使用下面這種方式比較好:
<img src="<%= Url.Content("~/Content/images/ajax-loader.gif") %>" />

2011年3月18日 星期五

[ASP.NET MVC] JQuery筆記

            $.post('url', { id: id },
                    function (data, textStatus) {  //callbackFunc
                        if (data == "1") {                        
                        }
                        else {
                        }
                    }, "text");

===
插入表單
http://stackoverflow.com/questions/171027/jquery-add-table-row

====
移除表單
    $('#trid_' + id.toString()).remove();

====

USING JQUERY AJAX METHODS IN ASP.NET MVC: $.GET() AND $.GETJSON() VS. $.POST()


====

2011年3月17日 星期四

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

How to add a fixed title into MasterPage in ASP.NET MVC
====

如果我們想在主版頁面加入固定標題Maidot,直覺的想法是:

<title>
        <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
        -Maidot
</title>

但是這樣做是沒有任何效果的,MVC只會抓取ViewPage的TitleContent中的值,
可行的方法是:

<title>
        <asp:ContentPlaceHolder ID="TitleContent" runat="server" />
        <asp:Literal runat="server" Text=" - Maidot" />
</title>

[ASP.NET MVC] 單一或多重檔案上傳

ASP.NET MVC mutiple file upload via ajax and JQuery
----------------------------
2011/08/03 更新:

發現了一個更好用的plug-in,GNU LGPL授權,

IE似乎不行,其他試用中...

3. 用HTML5

2011年3月15日 星期二

[ASP.NET MVC] 如何在主版頁面(Masterpage)中載入的子頁面的javasript或css

關鍵字: ASP.NET MVC Master Page View javasript load

How to load JavaScript in View to MasterPage?
====

1. 在MasterPage的head區段中定義ContentPlaceHolder,讓View可以放入JavaScript:

<head runat="server">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
    <title><asp:ContentPlaceHolder ID="TitleContent" runat="server" /></title>

    <asp:ContentPlaceHolder ID="head" runat="server" /> 
</head>

2. 在View中加入對應的Content:

    <asp:Content ID="Content3" ContentPlaceHolderID="head" runat="server">
        <script type="text/javascript" src="../../Scripts/tiny_mce/tiny_mce.js"></script>
        ...
    </asp:Content>

[IIS] 如何在IIS Express 使用多個網站

關鍵字:IIS Express 啟動 啟用 開啟 多個 兩個 網站 網頁 站台
======================
How to host more than two web applications in the same website on IIS Express 7.5?

假設要開兩個網頁應用程式分別在C:\web1、C:\web2中,在applicationhost.config中定義如下:


    <site name="Test" id="2" serverAutoStart="true">
        <application path="/">
            <virtualDirectory path="/" physicalPath="C:\tempweb" />
        </application>
        <application path="/a">
            <virtualDirectory path="/" physicalPath="C:\web1" />
        </application>
        <application path="/b">
            <virtualDirectory path="/" physicalPath=" C:\web2" />
        </application>

        <bindings>
            <binding protocol="http" bindingInformation=":80:192.168.2.100" />
        </bindings>
   </site>

然後就可以使用 http://192.168.2.100/a , http://192.168.2.100/b 來訪問網頁了。

2011年3月10日 星期四

[CSS] 如何強制div永遠在flash的圖層上面而不被蓋住

關鍵字:CSS、z-index、flash、圖層、覆蓋、蓋住、遮住。
================
假如我們希望某個連結永遠顯示在flash上面,方法如下:
1. 先將flash 與 連結 設定各自的div  2. 增加wmode屬性為opaque (紅字部分)


    <div id="intro">
            <ul>
                <li><a href="...*.html">某個連結</a></li>
            </ul>
    </div>


    <div class="flash">
       <object classid=....
           <param name="movie" value="...
           <param name="quality" value="...
           <param name="wmode" value="opaque" />
           <embed src="...
       </object>
    </div>

3. CSS檔中設定z-index值,越大代表圖層越前面(越靠近使用者):


.flash{
        ...
z-index:10;
}



#intro ul{
        ...
z-index:100;
}

#intro ul li{
        ...
z-index:100;
}

2011年3月9日 星期三

[CSS] 未整理筆記

CSS原始碼瘦身網站
http://www.cssdrive.com/index.php/main/csscompressoradvanced/

.active 偽類
http://www.w3school.com.cn/css/pr_pseudo_active.asp

current用法
http://mid.lt263.com/mb/divcssjiaocheng/13802.html

純CSS選單
http://meyerweb.com/eric/css/edge/menus/demo.html

[CSS] IE8 無法正確顯示li 的 list-style-image 屬性(項目圖示)

li{
    list-style-image:url(images/XXX.gif);
}


如果在li中定義list-style-image,只有FireFox沒有問題,IE8會造成項目圖示與項目文字不對齊,Google Chrome 9.0會造成圖示遺失,唯一比較好的方法是把該項目圖示設定為背景圖案,利用pading的方式解決。

li{
 clear:inherit;
 margin:0;
 width:80px;
 float:left;                           /*讓條例項目呈現水平排列*/
 background-image:url(images/XXX.gif);
 background-repeat:no-repeat;
 background-position:left; 
 padding-left:10px;
 list-style-type:none; /*去除項目符號*/
}




參考網站:
1. list-style-image (CSS property)
http://reference.sitepoint.com/css/list-style-image

2. CSS ul li image to align with text

3. Tutorial 1 - Background images for bullets - all steps combined
http://css.maxdesign.com.au/listutorial/master.htm

2011年3月7日 星期一

[CSS] 在網頁上顯示windings;webdings字型

要在網頁上顯示這種特殊字型的方法為:
<font face="wingdings">&#50;</font>

不過FireFox不支援這種符號,所以有兩種方式可以解決:
1. 使用Unicode:  例如◄的編碼為: &#9668
2. 在本地設定顯示字型 (不建議)。

【相關網頁】
wingdings對應至unicode:
 http://www.alanwood.net/demos/wingdings.html

Unicode編碼表:
 http://zh.wikibooks.org/w/index.php?title=Unicode/2000-2FFF&variant=zh-hant

輸入符號查詢編碼:
 http://www.nengcha.com/code/unicode/?key=%26%239745;

2011年3月6日 星期日

Windows 自動關機 重開機 DOS指令

以下的指令可以寫成*.bat檔案自動執行


10秒後關機:
shutdown -s -t 10


20秒後重開機:
shutdown -r -t 20



[IIS 7.5 Express]如何使用Windows Service啟動IIS Express 並且開port 80外網

[How to use windows service to start IIS Express 7.5 and serve external on port 80]

研究了三天,終於發現就算使用Administraotor權限,建立Process時也是拒絕存取的狀況,不過如果你使用我下面的方法,就可以順利使用Windows Service方式啟動IIS Express 7.5,並且可以提供外網服務在port 80上。

1. 呼叫iisexpress.exe必須傳入【/site:你的網站名稱】
2. 如果是Windows XP中,Windows Service帳戶預設讀取IIS Express的設定檔為【C:\Documents and Settings\LocalService\My Documents\IISExpress\config】
3. 設定檔中必須定義以下東西:


            <site name="TestMVC" id="2" serverAutoStart="true">
                <application path="/">
                    <virtualDirectory path="/" physicalPath="C:\TestMVC" />
                </application>
                <bindings>
                    <binding protocol="http" bindingInformation="*:80:192.168.10.128" />
                </bindings>
            </site>
          <!-- (其中site name就是網站名稱,bindingInformation就是你要開的IP與Port) -->


4. Windows Service必須要這樣寫(我使用Visual C# 2010):

                            Directory.SetCurrentDirectory(string.Format(@"C:\Program Files\IIS Express"));
                            process.StartInfo.WorkingDirectory = @"C:\Program Files\IIS Express";
                            process.StartInfo.FileName = @"C:\Program Files\IIS Express\iisexpress.exe";
                        process.StartInfo.Arguments = String.Format("/site:{0}", WebSiteName);
                        process.StartInfo.UseShellExecute =  false;
                        process.StartInfo.CreateNoWindow = true;
                        process.StartInfo.WindowStyle = ProcessWindowStyle.Normal;
                       process.StartInfo.Verb = "runas"; //********VeryImportant!!
                        System.Diagnostics.Process.Start(process.StartInfo);


=======================
如果有任何問題歡迎留言發問。
If you have any problem , let me know~
=======================

更新:
1. 如果在Win7上,可能需要執行下列命令:
>netsh http add urlacl url=http://yourIP:yourPort/ user=everyone
例如 >netsh http add urlacl url=http://192.168.0.1:8080/ user=everyone

2. 需打開Windows防火牆,允許TCP連入連出,埠號為8080(看您設定的是哪個埠號)。

2011年3月3日 星期四

[ASP.NET MVC]在IIS 7 ; 7.5 運行 ASP.NET MVC 3 RC2 之必要條件

Running ASP.NET MVC 3 RC2 on IIS 7.0 or 7.5
=====================================
以下參考為必要條件,需設定複製到本地端
(set copy local to true for the following assemblies)
System.Web.Abstractions
System.Web.Helpers
System.Web.Routing
System.Web.Mvc
System.Web.WebPages


以下參考為必要條件,必須專案中加入參考並且
設定複製到本地端

(add the following assembly references to project and set copy local to true)
Microsoft.Web.Infrastructure
System.Web.Razor
System.Web.WebPages.Deployment
System.Web.WebPages.Razor

2011年3月2日 星期三

[Visual C#]如何將Windows Service專案包裝成安裝檔案

1. 在方案中加入一個安裝專案(注意不是Web安裝專案)。

2. 在Service1.cs[設計]中,點選滑鼠右鍵選擇【加入安裝程式】,成功的話會多一個ProjectInstaller.cs檔案,其中包含【serviceInstaller1】【serviceProcessInstaller1】。

3. serviceInstaller1中,【ServiceName】屬性為服務啟動時顯示的名稱,【StartType】屬性為啟動類型,通常選擇Automatic(自動啟動)。

4. serviceProcessInstaller1中,【Account】屬性通常選擇LocalService(權限最高啟動服務時不易出錯)。

PS 只有在 Windows XP 和 Windows Server 2003 系列產品中,才可使用 LocalService 和 NetworkService 的值。

5. 安裝專案中加入專案輸出,選擇我們的Windows Service專案,並且加上4個自訂動作,大功告成囉。

========
如果是Windows Service裝載WCF Service,則必須將App.config複製到輸出目錄!

Reference


[Visual C#]如何使用Debug模式偵錯Windows Service程式

保哥有個方法很讚,這裡紀錄一下,大綱是可以在同一個專案中選擇使用Debug模式來偵錯Windows Service程式的方式,不會破壞原本Windows Service的架構:

http://blog.miniasp.com/post/2009/04/05/How-to-debugging-Windows-Service-and-Setup-Project-Custom-Action.aspx