New <%: %> Syntax for HTML Encoding

依據 ScottGu先生文章,釐清新語法之觀念

●HTML Encoding
●New <%: %> Code Nugget Syntax
為了方便開發者快速檢視自己的專案並修改,新的語法採<%:  %>,它的樣子非常類似<%= %>,同樣能render output,只是新語法會自動encode

舊版寫法要多一道Encode的手續




新版寫法會自動處理~寫來就比較簡潔





●Avoiding Double Encoding
為了避免重複Encoding,可以一律採用新語法,它會自動判斷是否需要Encode
例如Html.TextBoxFor的傳回值類型是System.Web.Mvc.MvcHtmlString,無須再Encoding

System.Web.Mvc.MvcHtmlString
來源參考:MvcHtmlString
說明:表示不應該再次編碼的 HTML 編碼字串。


●Scaffolding ASP.NET MVC 2 Views
透過VS2010的Scaffold Template為例子,展現出現在的View Template都用新語法


●Summary
新語法的好處有
1. 簡化程式,可輕易檢查/驗證網站中的HTML都有正確的encoding
2. 協助應用程式免於XSS(cross-site script injection) 和 HTML injection攻擊


參考文章
1. New <%: %> Syntax for HTML Encoding Output in ASP.NET 4 (and ASP.NET MVC 2)
2. Html Encoding Code Blocks With ASP.NET 4

reload DropdownList values in asp.net mvc3 without refreshing page

以MVC撰寫的網頁上有個DropdownList,頁面初次載入是透過ViewBag來賦予值,在觸發某事件後需重新載入新值。
但DropdownList會因頁面沒有refresh,無法抓取ViewBag的新值。
解決方式可透過getJSON,寫法如下

UI
@Html.DropDownList("NameList", @ViewBag.NameList as IEnumerable)

JavaScript
function loadNames(conditionMd) {
$.getJSON("_NameList", { json: conditionMd }, function (data) {
var selectList = $("#NameList");
selectList.empty();
$.each(data, function (index, optionData) {
var option = $( '').text(optionData.Text).val(optionData.Value);
selectList.append(option);
});
});
}


C#
public ActionResult _NameList(string json)
{
Dictionary< string, string> conditions = new Dictionary< string, string>();
JavaScriptSerializer jss = new JavaScriptSerializer();
conditions = jss.Deserialize< Dictionary< string, string> >(json);
Array result = getNameValues(conditions);

List< SelectListItem> items = new List< SelectListItem>();
items.Add(new SelectListItem { Text = "Plesse select", Value = "Plesse select" });
for (int j = 0; j < result.Length; j++)
{
string[] temp1 = (string[])result.GetValue(j);
items.Add(new SelectListItem { Text = temp1[0], Value = temp1[1] });
}
return Json(items, JsonRequestBehavior.AllowGet);
}


參考資訊How to reload dropdown list values in asp.net mvc3 without refreshing page