因系統功能需要一個View使用到多個Model來完成資料的呈現,
研究了ASP.NET MVC中的ViewModel使用方式並將其實作,
但在實作過程中卻發生了Model類別為List類型的回傳值一直為null,
ViewModel程式碼舉例如下:
檔案內會看到底下三行預設值:
public class ScoreViewModel在View中則是透過強型別以foreach方式將stdList依序取出
{
public string subject { get; set; }
public string score { get; set; }
public int count{ get; set; }
public List<StudentM> stdList { get; set; }
}
<% foreach (var item in Model.stdList ) { %>
<%:Html.EditorFor(model => item.name)%>
<%:Html.EditorFor(model => item.id)%>
} %>
但Post後stdList卻總是回傳空值,在中文資料缺乏的情況下,
透過viewmodel null關鍵字看了一堆英文資料,
才知道原來透過上述方式顯示後所產生的input name無法與Model name對應,
正常html顯示應為:
<input name="stdList[0].name" type="text"></input>
<input name="stdList[0].id" type="text"></input>
但前述foreach程式碼所產生的input name如下:
<input name="item.name" type="text"></input>
<input name="item.id" type="text"></input>
這即是造成Post後stdList一直為空的原因,
因此在ViewModel中如果有用到List或IEnumerable類型的Model類別時,
在View Page取值若使用foreach的話需加上個count計數,或改用for loop方式取值
<% int count=0;這樣Post後才能正確回傳stdList的值,而不是null。
foreach (var item in Model.stdList ){ %>
<%:Html.EditorFor(model => Model.stdList [count].name)%>
<%:Html.EditorFor(model => Model.stdList [count].id)%>
<% count++; }%>
沒有留言:
張貼留言