Category Archives: ASP.Net MVC

ASP.Net MVC Javascript Alert ViewBag value

今天需要做用JavascrptAlert function 來彈出一些提示信息姶用戶..
因為不同的用戶可能會收到不同的信息..
而這些信息是Store 在ASP.Net MVCViewBag上…
怎樣才可以在Javascrript上使用Alert來輸出 ViewBag的內容呢?

解決方法十分簡單

<script type="text/javascript">
var AlertMessage = '@(ViewBag.ShareChiWaiMessage)';
        alert(AlertMessage);
</script>

Hope you find it useful

ASP.Net How to check if in localhost – ASP.Net 如何檢測是在Local Machine?

今天開始為ASP.Net MVC的Project加入一些 Logging的功能…
這些功能會把一些Transaction 記錄到Database
或者把Application Error Email 給負責的同事..
由於這個Project還是在開發中
所以不希望會把所有在開發時的Transaction和出現的Error 也發Email

解決方法很簡單..
第一個方法是在Web.Config 檔案上設定一個變數…
來決定會不會把記錄記下和發電郵..
另一個方法是使用程式碼來判斷目前的網址是不是Local
不是的話才記錄資料和發Email

判斷是不是Local的程式碼是:

CSharp

bool isLocal = HttpContext.Current.Request.IsLocal;
if(!isLocal){
//記錄資料1
}

Hope you find it useful

ASP.Net/ ASP.Net MVC Get Client IP Address – 在ASP.Net /ASP.Net MVC上 如何取得用戶的IP Address

今天開始為公司的ASP.Net MVC 網站加設一些保安用的記錄 Security Logging的功能…
主要是當客戶查詢時在那些時間他的戶口有人登入過…etc
方法十分簡單
只要建立一個Database Table
把登入/登出的時間和IP Address記下來便可以了…

之後我們便要在ASP.Net/ASP.Net MVC上取後我們用戶的IP Address

方法十分簡單
只是在ASP.Net的Code Behind 上
或在ASP.Net MVC 的 Controller 上 便用以下的程式碼
便可以取得用戶的IP Address了

 string IP = Request.Params["REMOTE_ADDR"].ToString();
 //或
 string UserHostName = Request.UserHostName;
 //或
 string UserHostAddress = Request.UserHostAddress;
 

如果你想在Class 上面取得用戶的IP Address的話
可以嘗試以下方法

string IP = System.Web.HttpContext.Current.Request.UserHostAddress;

如果有更好的方法, 請留言給我
謝謝

Hope you find it useful

ASP.Net MVC Disable TextBox/ ReadOnly – 如何在ASP.Net MVC上把TextBox停用/禁用 /或設定成惟讀

今天需要建立一個Form
給使用者更新資料…
有一些資料是不可以更變的..
之前想用”Html.Label來解決的..
可惜當把資料PostControllerValue卻變了null
原因是因為我們需要用一些Input Control 來輪入資料吧
所以便要使用 TextBox了 而要把禁止使用者更變這個TextBox的值
我們可以設定htmlAttributesDisabled設定為true便可以了
解決方法:
@Html.TextBox(“HTML Control的名”,”這個TextBox的值”, HTML 特性設定/htmlAttributes new{ disabled=”true”})

E.G.

@Html.TextBox("PhoneNumber",Model.PhoneNumber, new{ disabled="true"})

很可惜…問題還是沒有解決…都是把資料變成了null
最後終於找到解決方法了
我是需要把TextBox變成ReadOnly便可

@Html.TextBox("PhoneNumber",Model.PhoneNumber, new{ @readonly="true"})

*請注意我們需要在readonly之前加上 “@” 的
E.G. @readonly
因為readonly是一個reserve word

Hope you find it useful

ASP.Net MVC3 Set Drop Down List Width

今天開始Migrate我的 舊Website到 ASP.Net MVC3 上..
之前的網頁有2對的 Drop Down List 給使用者用來選擇產品的
[這樣使用者便可以選擇產品編號 或 產品名稱了]

由於default 的 Drop Down List的闊度大小是由Drop Downlist 的內容決定的關係..
[由第一次Load 進DropDownList 的內容決定.. 所以當我做使用Cascaded DropDownList 時.. 由於他還是以第一次Load進DropDownList 時最濶的內容 為他的闊度Width.. 當你有一些更長的DropDownList 內容時..很可看不能完全看得見 內容的]
所以在沒有預設闊度的請況下..
這2對的 Drop Downlist便會不一致了

之前在ASP.Net的 Web Application上我們可以直接修改這個

<asp:dropdownlist 控件的屬性, 設定 width=”100”> 等等
來設定
E.G.
<asp:DropDownList ID=”ddl_Fruit_ID” runat=”server” AutoPostBack=”true”
onselectedindexchanged=”ddl_Fruit_ID_SelectedIndexChanged” Width=”150px” />
<asp:DropDownList ID=”ddl_Fruit_Name” runat=”server” AutoPostBack=”true”
onselectedindexchanged=”ddl_Fruit_Name_SelectedIndexChanged” Width=”200px” />

而用 ASP.Net MVC的話便要使用css style了

解決方法:
我們可以在建立Drop DownList時放入一個 parameter
這個Parameter是用來負責 這個控件的css style的

Hope you find it useful

JQuery Non-Ajax Post

最近我的ASP.Net MVC Project 又遇到難題了

有時候因為希望可以建立一些功能給客戶選擇…
選擇後可以按一下相對的按鈕來 Download file
之前用ASP.Net時可以通過 Code-Behind來實現的

由於是要看看選擇了什麼才決定download 什麼東西
我的想法是用Jquey 來把已選擇的條件用Ajax Post到 Controller上
我的Controller是這樣的.. 為了方便做試驗我 Hard code Download File的位置

[HttpPost]
        public ActionResult DownloadFile(string Filename)
        {
            return File(@"D:\UserProfile\Desktop\Img\MySQLMD5Function.png", "png/application", Filename);
        }

我的cshtml是

&lt;h2&gt;Non Ajax Post&lt;/h2&gt;
&lt;input type="button" value="NonAjaxPost" id="btn_NonAjaxPost" /&gt;

之後便可以在這個Controller上 輸出這個檔案

  $("#btn_NonAjaxPost").click(function () {
 $.post('@Url.Action("DownloadFile", "NonAjaxPost")', { Filename:"example.png" }, function () {
            });
        });

之後發現.. 好像不能用 Ajax.PostAjax.GetDownload File
E.G. 不可以用Jquery 的Ajax Post或Get 的動作 連到一個 Download FileActionDownload檔案.. [可能是因為Response 的Header 不能正確地 編譯 的關係]

最後終於想到了解決方法..
就是要寫一個功能來令到到JQuery做一個 正常的Post/Get
我們可以Extend JQuery的 Library

<script type="text/javascript">
$(document).ready(function () {
(function($) {
    $.extend({
//要做到Non-Ajax Get的話
//我們可以使用
//document.location = “我們想用get 去瀏覽到的URL 上” 之後再加進 要用的Parameter進去
//其間我們使用這個功能時要放進2個Parameter 一個是 目的地的URL
//另一個是 我們希望Post的 Parameter
        NonAjaxGet: function(url, params) {
            document.location = url + '?' + $.param(params);
        },
//要做到Non-Ajax Post的話
//我們可以使用JQuery/Javascript 來寫一個 暫用的Form來進行 之後用form.submit() 這個功能把Form Post進我們又Non-Ajax Post的頁面上
//其間我們要放進2個Parameter 一個是 目的地的URL
//另一個是 我們希望Post的 Parameter
        NonAjaxPost: function(url, params) {
            var $form = $("<form method='POST'>").attr("action", url);
            $.each(params, function(name, value) {
                $("<input type='hidden'>")
                    .attr("name", name)
                    .attr("value", value)
                    .appendTo($form);
            });
            $form.appendTo("body");
            $form.submit();
        }
    });
})(jQuery);
});

使用方法:
假設我們都是使用JQuery

//            $.NonAjaxPost('要POST 到的URL', {
//                變數: "變數值",變數2: "變數值2"
//            });

  $("#btn_NonAjaxPost").click(function () {
            $.NonAjaxPost('@Url.Action("DownloadFile", "NonAjaxPost")', {
                Filename: "example.png"
            });
        });

這樣我便可以成功在ASP.Net MVC 使用JQuery來Download File了

Hope you find it useful

How to display HTML data on ASP.Net MVC 3 – 如何顯示把資料庫上的HTML 放進 asp.net mvc 3 上

如何顯示把資料庫上的HTML 放進 asp.net mvc 3
今天開始在公司的其中一個網頁上把之前從Rich Text Editor輸入的資料顯示出來
我的做法是把資料庫的相關資料加進 ViewBag上.
E.G.
ViewBag.Notice =<h1> Share ChiWai ASP.Net MVC3 Show HTML Sample</h1>

我的 Controller

public ActionResult Index()
        {

            ViewBag.Notice = "<h1> Share ChiWai ASP.Net MVC3 Show HTML Sample</h1>";
            ViewBag.NoticeNewHTMLString = new HtmlString("<h1> Share ChiWai ASP.Net MVC3 Show HTML Sample</h1>");
            return View();
        }

之後發現出現了一個小問題..
就是這個句子整句在網頁上顯示出來..
HTML 的Markup 沒有被Render...

我便在想..是不是我應該使用HTML.Decode 來解決這個問題..
HTML.Decode也沒有什麼效果
也嘗試用 new HtmlString.. 結果也沒有分別
最後終於找到解決方法了

解決方法:
只要在cshtml中使用
html.raw便可以了

或者是在 Code Behind 使用 new HtmlString 來轉換這個HTML Markup

以下是我的cshtml:

Original:
&lt;br /&gt;
@ViewBag.Notice
&lt;br /&gt;
New HTML String From Code Behind:
&lt;br /&gt;
@ViewBag.NoticeNewHTMLString
&lt;br /&gt;
New HTML String From cshtml:
&lt;br /&gt;
@{new HtmlString(ViewBag.Notice);}
&lt;p /&gt;

HTML Encode:
&lt;br /&gt;
@Html.Encode(ViewBag.Notice)
&lt;p /&gt;
Raw HTML:
&lt;br /&gt;

結果:

Hope you find it useful