【问题标题】:How to refresh a view calling RedirectToAction?如何刷新调用 RedirectToAction 的视图?
【发布时间】:2012-04-24 07:13:01
【问题描述】:

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

查看(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);  
}

【问题讨论】:

  • “这不起作用” 你能说什么不起作用吗?发生什么了?您是否通过ajax 请求到达此操作???
  • 是的。我是对的...请参阅下面的答案。我的水晶球就像一个魅力!

标签: jquery ajax asp.net-mvc asp.net-mvc-3 redirect


【解决方案1】:

您似乎正在发出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);...
        }
    })
}​

【讨论】:

  • 谢谢,我对客户端的东西还很陌生。如何使用新的垃圾客户端更新我的视图?垃圾显示在一堆 div 中,所以不确定我将如何传递新的垃圾以显示?我正在使用@Html.EditorFor(model => model.Junk)。
  • 酷!那么,对于 Junk,它会正确显示吗?新垃圾{id = 2, name =“firstone”}。它们显示在它们自己的编辑器模板中,该模板显示垃圾集合中每个垃圾对象的 ID 和名称。
  • @JaJ。如果Junk 不是“简单对象”(int\string\long\DateTimeetc')而是复杂对象,则必须分别更新每个元素。如何?这取决于模板。检查 DOM 结构以了解获取每个垃圾元素所需的选择器,并检查响应结构是什么。祝你好运!
  • @JaJ。我看到了你的更新。试试这个:$('#ID').val(response.Junk.ID)不确定垃圾的“大小写”,也许它应该是小写的,你没有粘贴它的代码。怎么样?
猜你喜欢
  • 2012-08-10
  • 1970-01-01
  • 2021-10-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
相关资源
最近更新 更多