顯示具有 MVC 標籤的文章。 顯示所有文章
顯示具有 MVC 標籤的文章。 顯示所有文章

2019-05-14

[MVC] Post Data to WebApi 發生缺少 CORS 'Access-Control-Allow-Origin' 檔頭

近日在使用 Angular POST Json 到 MVC 開發的 WebApi 時,出現以下錯誤訊息:

因為之前有遇過,知道是跨網域問題,很自然的使用之前的解法,就是在 WebApi 的 Web.Config 加上如下圖的資訊即可。


但是! 這次居然無效!! 

研究了老半天,實在是不知道哪裡出問題,只好另尋解法,找到使用 Microsoft.AspNet.WebApi.Cors 來設定,兩種方法都先記錄下來,方法如下:
  •  NuGet 下載 Microsoft.AspNet.WebApi.Cors
  • 在 WebApiConfig.cs 加上以下程式
  • 在 Controller 加上下圖紅框字,原因跟以前寫在 Web.Config 的一樣



參考來源:Microsoft

2017-08-16

[MVC] FormCollection 如何取得 Listbox 所有 Option

MVC 的架構中,View 裡只要有被 Form 包住的元件,post 後都能用 FormCollection 取得指定元件的值。

今天將 select tag 加上屬性 size="5",讓它變成 Listbox,如下所示:
<select id="select1" size="5">
    <option value="Tim1">Tim</option>
    <option value="John1">John</option>
</select>

然後直覺覺得使用 FormCollection 就能取到所有的值 (Tim1, John1),想不到都回傳 null,為什麼會是 null 呢? 至少不是 Tim1 就要是 John1 其中之一吧 !

一般較常使用沒有加屬性 size 的 select tag,也就是下拉選單,它不管怎樣一定會選在一個 option 上,所以 FormCollection 取到的就是這個被選中的 option value。
這概念在 Listbox 可行不通,因為 Listbox 預設並不會選在一個 option 上,一定要你有點選其中之一,才算是有選上,否則只能得到 null 。

知道了 Listbox 的特性後,想取得所有的 option value 就好辦了,只要在 post 之前先將所有 option 選起來,這樣 FormCollection 就會得到所有 option 的 value了。要注意的是,select tag 記得加上屬性 multiple,才支援多選。
<!--加上 multiple 支援多選-->
<select id="select1" multiple size="5">
    <option value="Tim1">Tim</option>
    <option value="John1">John</option>
</select>

...

// 將所有 option 選起來
<script>
    $("#select1 option").attr("selected", "selected");
</script>


參考連結:stackOverflow

2016-12-21

[MVC] 網頁不定時被導向 /Account/Login

最近將 MVC 網站搬移到新的主機,卻發現連任何一個網頁時,會不定時被導向 /Account/Login?ReturnUrl=xxxxxx 的畫面,專案裡並沒有這個網頁,當然就顯示出"找不到頁面" 的錯誤。

既然是換主機後才發生的,程式沒動(十大程式人員常用語之首)的情況下,當然就是檢查 IIS 了,果不其然的發現驗證中同時開啟了 Windows 驗證和表單驗證,將表單驗證停用,只保留啟用 Windows 驗證,問題馬上解決。



參考來源:stackOverflow

2016-08-06

[MVC] 開啟 MVC 專案預設關閉的好用功能

此篇用來記錄 MVC 專案中,有些設定可以開啟,在開發時會有幫助:

(1)
Bundles 是用來統一管理專案會用到的 CSS 和 JavaScript,可依 Group 的概念在這裡群組化,想用時就 Import 該群組即可。但 MVC 專案預設 Debug Mode 即使你有建立和 Import Bundles,也不會幫你 Import 那些 CSS 和 JavaScript,你必須在 BundleConfig 加上如下圖的設定,才會支援:

(2)
Complier 預設不會檢查 View 裡的程式碼是否有問題,要修改專案資料夾裡的 .csproj,將裡面的 <MvcBuildViews> 改成 true 就可以了。

(3)
Web API 可以在Global.asax 加上下圖的設定,預設就能回傳 JSON 格式。
回傳的方法:



參考來源:StackOverflow