私は.NETmvcを初めて使用します。
「DisplayThings」ビューには、次のようなものがあります。
@foreach (var thing in Model)
{
@Html.Partial("DisplayPartial", thing)
}
部分ビュー「DisplayPartial」で私は持っています
@using (Ajax.BeginForm("Afunc", new AjaxOptions ()))
{
@Html.EditorFor(model => model.AstringThing)
@Html.EditorFor(model => model.AintThing)
<input type="submit" name="submit" value="Ajax Post" />
}
現時点では、「Afunc」-アクションはモデルをデータベースに保存してから、コントローラーアクションにリダイレクトして、データベースからすべての「モノ」を取得し、「ディスプレイシング」ビュー全体をレンダリングします。
私の質問は次のとおりです。送信ボタンの1つを押すと(リスト内のすべての「もの」に対して1つの送信ボタンがあります)。その部分的なビューだけをリロード/変更に反映させたいです。 「Displaythings」ビュー全体をリロードしたくありません。どうすればよいですか?部分ビューを返すだけでは、その部分ビュー以外はすべて失われます。
これが悪いアプローチである場合は、道順を教えてください。
更新:
部分ビューが新しいページにレンダリングされるので、まだ何か問題があります。私のコントローラー:
public ActionResult Afunc(ThingModel thingmodel)
{
// do
return PartialView("DisplayPartial", thingmodel);
}
UpdateTargetIdを使用してみましたが、どちらも同じ結果になりました(新しいページ)
単にnew AjaxOptions
として渡されているAjaxOptions
で、UpdateTargetId
プロパティを使用してターゲット要素を指定できます。
<div id="unique_thing_id">
@using (Ajax.BeginForm("Afunc", new AjaxOptions { UpdateTargetId = 'unique_thing_id' }))
{
}
</div>
上記では、すべての「もの」に一意のIDを持つコンテナは、<div id="unique_thing_id">
で表されています。これは、リクエストの応答に置き換えられます。 Afunc
を変更して、特定の「もの」のみを部分的にレンダリングします。