2

リダイレクト (または同等のもの) を呼び出すコントローラー メソッド内でビューを更新するにはどうすればよいですか?

ビュー (Index.cshtml):

@model ViewModel

@Html.EditorFor(model => model.First)
@Html.EditorFor(model => model.Last)

@Html.EditorFor(model => model.Junk)

// call is invoked to PerformMagic as such:

onComplete: function (event, queueID, fileObj, response, data) 
{
   $.ajax(
   { url: '@Url.Action("PerformMagic","Home")',
       data: { first: $("#fname").val() },
      })
   }

Junk.cshtml (エディター テンプレート)

 @model Models.Junk

 <div>
    @Html.LabelFor(model => model.ID)
    @Html.EditorFor(model => model.ID)
</div>
<div>
    @Html.LabelFor(model => model.Name)
    @Html.EditorFor(model => model.Name)
    @Html.ValidationMessageFor(model => model.Name)
</div>

コントローラ:

// Called from jquery client
public string PerformMagic(string Id)
{
    ViewModel model = dbContext.GetPersistedView();
    model.Junk.Add(new junk);

    // I need to update my view here but this doesn't update the view (model updates fine)....
    // ...after a refresh on the browser of course the new junk in the model is displayed.
    return RedirectToAction("Index", model);  
}
4

1 に答える 1

5

お願いしているようですajax

ajaxリクエストをリダイレクトすることはできません! あなたがすべきことは、モデルのJson値を返し、クライアント側でページを更新することです:

public string PerformMagic(string Id)
{
    ViewModel model = dbContext.GetPersistedView();
    model.Junk.Add(new junk);

    return Json(model);
}

jQuery:

onComplete: function(event, queueID, fileObj, response, data) {
    $.ajax({
        url: '@Url.Action("PerformMagic","Home")',
        data: {
            first: $("#fname").val()
        },
        success: function(response) {
            $('#First').val(response.First);
            $('#Last').val(response.Last);
            $('#Junk').val(response.Junk);...
        }
    })
}​
于 2012-04-11T22:59:48.303 に答える