これは、ユーザーがsportseventsに登録できるHTMLフォームです。 Tシャツサイズについて、ユーザー別のプロファイル(例えば自分の子供たち)を登録することができ、すべてのイベントが潜在的にテキストボックスのような、いわゆる「その他の属性」を持つことができるなどAsp.NET MVC DynamicFormの値は投稿されましたがコントローラーに渡されません
@model Models.EventRegistrationModel
@{
Layout = null;
var playerCount = Model.PlayersToRegister.Count;
}
@using (Html.BeginForm("RegisterForEvent", "Event", FormMethod.Post)){
@Html.AntiForgeryToken()
<div class="form-group">
@for (int i = 0; i < playerCount; i++)
{
<div>
<p>@Model.PlayersToRegister[i].User.FullName</p>
</div>
<div
@Html.CheckBoxFor(model => Model.PlayersToRegister[i].PlayerShallGetRegistered)
</div>
//this is the "Additional Attributes"-section for each user-profile
@Html.Raw(Model.PlayersToRegister[i].Form.RenderHtml())
}
</div>
<input type="submit" value="Confirm Registration"/>
}
私はこれらのイベントを作成していないので、私はできませんこれらの「追加の属性」はどのように見えるのですか。それがDynamicFormを使用して動的にレンダリングされる理由です。 私の問題は、コントローラのこれらの属性のユーザー入力にアクセスできないことです。ブラウザのコンソールをチェックすると、入力がポストされているのがわかりますが、動的フォームの値をチェックすると、常に「null」と表示されます。 はここに私のコントローラです:
[HttpPost, ValidateAntiForgeryToken]
public ActionResult RegisterForEvent(EventRegistrationModel model)
{
for (int i = 0; i < playerList.Count; i++)
{
var form = Session["Form" + i] as Form;
model.PlayersToRegister[i].Form = form;
//var test = form
//var testtest = test.GetResponses(false);
}
return RedirectToAction("EventOverview");
}
あなたが見ることができるように、私は、フォームの「GetResponses」方法 - を使用しようとしましたが、それはnullを返しました。これはあなたが一度に一つのプロファイルを登録することしかできなかった古いバージョン、で働いていたとして、私は、セッションを介して値を取得しようとしています現時点では
public List<Response> GetResponses(bool completedOnly)
{
return InputFields.OrderBy(inputField => inputField.DisplayOrder).Select(field => new Response
{
Title = field.Title, Value = field.Response
}).Where(response => !completedOnly || !String.IsNullOrEmpty(response.Value)).ToList();
}
。セッション変数は、上記のビューを返すActionResultに割り当てられます。
私は過去のさまざまなスレッド(ModelState.Clearなど)でさまざまなソリューションを試していましたが、残念ながら成功したものはありませんでした。
さらに詳しい情報やコードなどが必要な場合は、私にお知らせください。
モデルバインダーは、フォームを 'EventRegistrationModel'にマッチさせることができないので、nullです。 'EventRegistrationModel'の代わりに' FormCollection'クラスを使ってみましたか? – nurdyguy
あなたはポストアクションの結果を意味しますか? – Rustius
この 'public ActionResult RegisterForEvent(FormCollection model)'を試して、データがモデル上に現れるかどうか確認してください。 – nurdyguy