在使用 ModelBinding 的時候,欄位屬性如果是 uniqueidentifier
那這個欄位不管你有沒有設定為必要輸入,預設都會是必輸
最近工作上的專案有用到 AspNet.Identity,
使用上上手之後的確很方便,帳號的建立以及權限的控管都幫我處理了很多事情,
不免俗地在帳號建立以及管理的時候需要建立使用者的權限(會使用到Table:AspNetRoles)
我建立了兩個權限:
在管理帳號的畫面上我新增了一個下拉式選單
後端的資料來源
public List<SelectListItem> GetRolseListItem(bool AddAll = false)
{
using (ATISNewEntities db = new ATISNewEntities())
{
var query = (from p in db.AspNetRoles.AsQueryable()
orderby p.RoleName
select new
{
p.Id,
p.RoleDescription
}).ToList();
List<SelectListItem> selectListItems = new List<SelectListItem>();
if (AddAll)
{
selectListItems.Add(new SelectListItem()
{
Text = "請選擇權限",
Value = ""
});
}
foreach (var item in query)
{
selectListItems.Add(new SelectListItem()
{
Text = item.RoleDescription,
Value = item.Id.ToString()
});
}
return selectListItems;
}
}
其中,AspNetRoles的欄位Id,型態是 uniqueidentifier
所以當我再給 請選擇權限 這個預設下拉式控制項的時候,Id 直接給空白的話,
會發現前端會自動檢核這個下拉式選單沒有值,不讓你Submit
一開始我一直覺得納悶,我又沒有設這個欄位是必要輸入的選項,
為什麼一直不讓我重新查詢
後來才找到原來型別是Guid的話,一定要給一個預設值,
後來我修改方法是在給 請選擇權限 這個預設下拉式控制項的時候做調整
Value的地方給一個Guid.Empty.ToString()
if (AddAll)
{
selectListItems.Add(new SelectListItem()
{
Text = "請選擇權限",
Value = Guid.Empty.ToString()
});
}
這個問題就解掉了
在使用 ModelBinding 的時候,欄位屬性如果是 uniqueidentifier
那這個欄位不管你有沒有設定為必要輸入,預設都會是必輸
這應該算是很巧合、誤打誤撞碰到的情境,
因為一般的狀況,如果要新增Guid型態的資料到資料庫內,都是在後端產生,不太可能讓使用者在前端輸入
我把Guid 型態的資料拿來當下拉式選項,又使用ModelBinding去接這個下拉式選項的值
所以才會碰到這個地雷