2

如何在调用重定向(或等效)的控制器方法中刷新视图?

查看(索引.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 回答