2 つのエンティティ (外部キーでリンク) を持つモデルがあり、各エンティティには、部分ビューを使用してレンダリングされた独自のタブがあります。各タブには独自の Ajax フォームもあります。最初のタブでエンティティを保存すると、2 番目のエンティティの保存または最初のエンティティへの更新の保存を有効にするために、2 つの部分ビューに戻りたいエンティティの ID が表示されます。この値をビューに戻すことはできません。
モデル:
public class Entity1
{
int ID1 { get; set; }
[Some attributes]
string field1 { get; set; }
}
public class Entity2
{
int ID2 { get; set; }
[Some attributes]
string field2 { get; set; }
}
public class MyModel
{
Entity1 entity1 = new Entity1()
Entity2 entity2 = new Entity2()
}
コントローラー:
public class MyController : Controller
{
[HttpGet]
public ActionResult Index()
{
var model = new MyModel();
model.entity1.ID1 = 0;
model.entity2.ID2 = 0;
return PartialView(model);
}
[HttpPost]
public ActionResult Index(MyModel model)
{
SaveMyModel(model)
// have tried ModelState.Clear(); here
return PartialView(model);
}
}
最後に、2 つの部分ビューの 1 つ
@model MyModel
@using (Ajax.BeginForm("Index", "Home",
new AjaxOptions
{
HttpMethod = "POST"
}
))
{
@Html.LabelFor(m => m.Entity1.field1)
@Html.EditorFor(m => m.Entity1.field1)
@Html.HiddenFor(m => m.Entity1.ID1)
<div class="form-actions">
<button type="submit">
Next section</button>
</div>
}
私の保存機能は、ID1 の値に応じて挿入または更新します。
問題は、ID1 の値が常にゼロのままであり、非表示フィールドが返されたときに更新されないことです。かみそりの更新をシングルステップで実行しようとしましたが、正しい ID がビューに送信されています。
上記は簡略化したものですが、問題をカプセル化しています。
前もって感謝します。
アップデート
次の場合、これを機能させることができます。
- モデルにエンティティが 1 つしかない
ModelState.Clear();
保存前に追加します