ASP.NETMVCとViewからControllerへのデータの受け渡しに問題があります。私はこのようなモデルを持っています:
public class InputModel {
public List<Process> axProc { get; set; }
public string ToJson() {
return new JavaScriptSerializer().Serialize(this);
}
}
public class Process {
public string name { get; set; }
public string value { get; set; }
}
このInputModelをコントローラーで作成し、ビューに渡します。
public ActionResult Input() {
if (Session["InputModel"] == null)
Session["InputModel"] = loadInputModel();
return View(Session["InputModel"]);
}
Input.cshtmlファイルには、入力フォームを生成するためのコードがあります。
@model PROJ.Models.InputModel
@using(Html.BeginForm()) {
foreach(PROJ.Models.Process p in Model.axProc){
<input type="text" />
@* @Html.TextBoxFor(?? => p.value) *@
}
<input type="submit" value="SEND" />
}
次に、送信ボタンをクリックすると、テキストフィールドに入力されたデータを操作したいと思います。
質問1:この@ Html.TextBoxFor()を見たことがありますが、実際にはこの「stuff=>otherstuff」を取得していません。「その他」は、データを書き込みたいフィールドである必要があると結論付けました。この場合は、おそらく「p.value」になります。しかし、矢印の前にある「もの」とは何ですか?
コントローラに戻ると、デバッグを伴うPOST用の関数があります。
[HttpPost]
public ActionResult Input(InputModel m) {
DEBUG(m.ToJson());
DEBUG("COUNT: " + m.axProc.Count);
return View(m);
}
ここで、デバッグは次のようなものだけを表示します。
{"axProc":[]}
COUNT: 0
したがって、返されたモデルは空です。
質問2:この@using(Html.BeginForm())で根本的に間違ったことをしていますか?これはここでの正しい選択ではありませんか?もしそうなら、どうすれば私のモデルをデータで満たしてコントローラーに戻すことができますか?
(ここでは「@modelList <Process>」を使用できません(上記の例は省略されているため、実際のコードではさらに多くのものがあります)。
誰かが私が見落としている詳細のいくつかを私に記入してくれることを願っています。