コントローラ コードの HttPost メソッドで Collection クラスを取得できません。何らかの理由で、たとえば「int」を取得できますが、辞書は取得できません。
ASPX ファイルで非表示の Input タグを使用しています。ASPX ファイルとコントローラー ページの HTTP ポストの前後に Debug.WriteLine を配置しましたが、辞書は ASPX ページにのみ読み込まれます。必要なコードページでは0です。
...</tr>
<% i++; %>
<% list.Add(user.ID.ToString()); %>
<% list.Add(user.FirstName.ToString()); %>
<% list.Add(user.LastName.ToString()); %>
<% list.Add(user.Seniority.ToString()); %>
<% list.Add(sec_a.ToString()); %>
<% list.Add(sec_b.ToString()); %>
<% list.Add(sec_c.ToString()); %>
<% list.Add(uvid_a.ToString()); %>
<% details.Add(i, list); %>
<% } %>
</tbody>
</table>
// it works here but not in the .CS file where the post is made
<% System.Diagnostics.Debug.WriteLine("Before Post value: " + details.Count); %>
// here is the hidden field that is supposed to send the variable into the Action method
<input type="hidden" name="student_details" value="<%= details %>" />
<div class="buttons">
<button type="submit" class="button">Export Data</button>
</div>
</fieldset>
</form>
</article>
//Controller file
[HttpPost]
public ActionResult Report(Dictionary<int, List<string>> student_details)
{
var grid = new System.Web.UI.WebControls.GridView();
var datatable = new DataTable();
datatable.Columns.Add("User ID");
datatable.Columns.Add("First Name");
datatable.Columns.Add("Last Name");
datatable.Columns.Add("xxx");
datatable.Columns.Add("yyy");
datatable.Columns.Add("zzz");
datatable.Columns.Add("Title");
datatable.Columns.Add("Grade");
System.Diagnostics.Debug.WriteLine("After Post value: " + student_details.Count);
foreach (var stud in student_details)
{
datatable.Rows.Add(stud.Value);
}
これは int 変数を渡しますが、Dictionary は渡しません。