2019年1月15日 星期二

[MVC]解決使用ValidateAntiForgeryToken出現提供的反仿冒語彙基元是針對使用者問題

登入驗證時使用ValidateAntiForgeryToken只要返回上頁重新登入頁面會出現提供的反仿冒語彙基元是針對使用者 "XXX",但是目前的使用者是 ""。 請在登入頁判斷有無驗證成功即可
public ActionResult Login()
{
    if (User.Identity.IsAuthenticated)
   {
     Session.RemoveAll();
     FormsAuthentication.SignOut();
     return RedirectToAction("Login"); //重點
    }
    else
    {
      return View();
    }
}

2018年12月7日 星期五

[SQL]使用 CASE WHEN當層數超過10會出現案例運算式的巢狀層級只能到10的解決方式

使用 CASE WHEN當層數超過10會出現案例運算式的巢狀層級只能到10的解決方式
SELECT  
      COALESCE(
              CASE 
                  WHEN Test= '1' THEN '1'
                  WHEN Test= '2' THEN '2'
                  WHEN Test= '3' THEN '3'
                  WHEN Test= '4' THEN '4'
                  WHEN Test= '5' THEN '5'
                  ELSE NULL
                  END,
                  WHEN Test= '6' THEN '6'
                  WHEN Test= '7' THEN '7'
                  WHEN Test= '8' THEN '8'
                  WHEN Test= '9' THEN '9'
                  WHEN Test= '10' THEN '10'
                  WHEN Test= '11' THEN '11'
              END
             )as Demo
FROM table

2018年10月26日 星期五

[C#6.0]新語法

先筆記一下
1.nameof 表示式
2.字串插值 
3.Null 條件運算子

請參考
https://www.huanlintalk.com/2015/01/csharp6-enhanced-expressions.html
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/keywords/nameof
https://docs.microsoft.com/zh-tw/dotnet/csharp/tutorials/string-interpolation
https://docs.microsoft.com/zh-tw/dotnet/csharp/language-reference/operators/null-conditional-operators

2018年10月23日 星期二

[AutoMapper]使用方式

1.使用Nuget 搜尋套件AutoMapper並安裝

2. namespace 加入 using AutoMapper;
3.以下為基本使用方式

var query = db.vw_SchoolStdTotal.ToList();
var config = new MapperConfiguration(cfg => cfg.CreateMap<vw_SchoolStdTotal, SchoolStdTotalDataModel>());
config.AssertConfigurationIsValid();
var mapper = config.CreateMapper();
result = mapper.Map<List<vw_SchoolStdTotal>, List<SchoolStdTotalDataModel>>(query);
var config = new MapperConfiguration(
cfg => cfg.CreateMap<SchoolStdTotalDataModel, vw_SchoolStdTotalViewModel>()
//忽略此欄對應
.ForMember(d => d.SchoolName, o => o.Ignore())
.ForMember(d => d.ProfessionGroupDetailName, o => o.MapFrom(s => s.ProfessionGroupDetailName == null ? "國中部" : s.ProfessionGroupDetailName))
 //資料源使用function處理
.ForMember(d => d.Button, o => o.MapFrom(s => dataListButton.ForGetTotalNumberHighSchoolList(desFun.DESEncrypt(s.ID.ToString())))));
更新資料寫法
不需要的欄位使用Ignore排除,關聯Key也要排除不然會出錯
     var query = db.PersonalInfo.Where(f => f.ID == ID).FirstOrDefault();
         if (query != null)
         {
             var config = new MapperConfiguration(
                 cfg => cfg.CreateMap()
                           .ForMember(d => d.x1, o => o.Ignore())
                           .ForMember(d => d.x2, o => o.Ignore())
                           .ForMember(d => d.ModifyDate, o => o.MapFrom(s => DateTime.Now)));
             config.AssertConfigurationIsValid();
             var mapper = config.CreateMapper();
             //PersonalInfo personalInfo = db.PersonalInfo.Find(21);
             mapper.Map(viewModel, query);
             db.SaveChanges();
         }
未完待續.......

參考來源
https://automapper.org/

2018年7月3日 星期二

[Jquery]找到td位置並將值帶入CheckBox

選擇下拉選單時將預設CheckBox Value置換成下拉選單所選的值

置換前

置換後
以上圖片 function名稱更正為ReSetCheckBoxVal


<td>
   <input name="selectCourse[]" type="checkbox" class="cbxDate2" value="001" >
   <select onchange="ReSetCheckBoxVal(this);">
      <option>請選擇任課教師</option>
      <option value="001">001</option>
      <option value="002">002</option>
   </select>
</td>


function ReSetCheckBoxVal(value) {
    var td = $(value).closest('td'); //找到td位置
    var getCheckBox = td.find('input:checkbox'); //找到td位置裡的checkbox
    getCheckBox.val($(value).val()); //將下拉選單值塞入找到的checkbox
}

2018年6月25日 星期一

[Bootstrap]多層視窗的遮罩


    $(document).on({
        'show.bs.modal': function() {
            var zIndex = 1040 + (10 * $('.modal:visible').length);
            $(this).css('z-index', zIndex);
            setTimeout(function() {
                $('.modal-backdrop').not('.modal-stack').css('z-index', zIndex - 1).addClass('modal-stack');
            }, 0);
        },
        'hidden.bs.modal': function() {
            if ($('.modal:visible').length > 0) {
                // restore the modal-open class to the body element, so that scrolling works
                // properly after de-stacking a modal.
                setTimeout(function() {
                    $(document.body).addClass('modal-open');
                }, 0);
            }
        }
    }, '.modal');

Visual Studio JS intellisense 失效解決方式

  試了好久,發現到工具>選項>IntelliCode js項目設定啟用,重新開啟VS就正常了! 後來發現是TypeScript3.2版有問題停用,使用4.3版的TypeScript即可