web-dev-qa-db-ja.com

Ajax.Beginformを送信した後に部分ビューを更新します

私は.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を使用してみましたが、どちらも同じ結果になりました(新しいページ)

9
Andreas

単に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を変更して、特定の「もの」のみを部分的にレンダリングします。

12
manojlds