2012-04-11 2 views
2

Как обновить представление в методе контроллера, вызывающего перенаправление (или его эквивалент)?Как обновить представление, вызывающее RedirectToAction?

View (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); 
} 
+0

_ «это не работает» _ вы можете сказать, что не работает? что происходит? вы достигаете этого действия с помощью запроса 'ajax' ??? – gdoron

+0

@gdoron: см. Обновления ... – JaJ

+0

Yessss. Я был прав ... См. Мой ответ ниже. Мой хрустальный шар работает как шарм! – gdoron

ответ

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);... 
     } 
    }) 
}​ 
+0

Thx, я довольно новичок в клиентской работе. Как я могу обновить свой вид с новой стороны нежелательной почты? Мусорщик отображается в кучке div, поэтому не уверен, как я буду проходить в новом нежелательном продукте, чтобы его отображали? Я использую @ Html.EditorFor (model => model.Junk). – JaJ

+0

@JaJ. Я показал вам, как в ответе. – gdoron

+0

О, извините ... не видел обновлений. – JaJ