2011年5月19日 星期四

誰說在MVC中不能使用 ViewState?

如同上一篇「利用泛型處理常式(ashx) 實作 .Net MVC 2 的圖形驗證功能 」,想將之前製作的MasterPage.Master(WebForm) 轉換到 Site.Master(MVC),又不想重新設計版面,因此就直接將MasterPage上的版面及元件一併複製到 Site.Master 中,一執行就出錯,因為Server Controller 必須放在有 runat="Server" 的容器內,因此就將 Site.Master 的 form 加入 runat="Server"屬性。

接著在<asp:button> 元件上用力點兩下,還真的會出現 ???_onClick 的事件處理程序,執行後,查閱網頁原始碼,真的有 ViewStatedoPostBack
<form name="aspnetForm" method="post" action="" id="aspnetForm">
<div>
<input type="hidden" name="__EVENTTARGET" id="__EVENTTARGET" value="" />
<input type="hidden" name="__EVENTARGUMENT" id="__EVENTARGUMENT" value="" />
<input type="hidden" name="__VIEWSTATE" id="__VIEWSTATE" value="/wEPDwULLTEwOTI1OTYyNzVkZLpot9ZfQv2AVX+qzchpLZSkhxSt" />
<!--div>

<script type="text/javascript">
var theForm = document.forms['aspnetForm'];
if (!theForm) {
theForm = document.aspnetForm;
}
function __doPostBack(eventTarget, eventArgument) {
if (!theForm.onsubmit || (theForm.onsubmit() != false)) {
theForm.__EVENTTARGET.value = eventTarget;
theForm.__EVENTARGUMENT.value = eventArgument;
theForm.submit();
}
}

</script>


註:環境=MVC 2, 在 VisualStudio 2008

沒有留言:

張貼留言