2013-09-15 7 views
0

У меня есть приложение MVC. Он имеет частичный вид, который предоставляет несколько форм посредством цикла. Это формы ajax и должны обновлять пользовательский интерфейс при подаче. Проблема в том, что я могу войти в контроллер и правильно изменить модель, но пользовательский интерфейс не обновляется.Частичный просмотр MVC, содержащий несколько форм, не обновит UI

Это мой частичный вид. Вы можете увидеть цикл, который создает ряд АЯКС форм ...

@{ 
    Layout = string.Empty; 
} 
<div id="divTileHistory"> 
    @foreach (var t in Model.TileHistory) 
    {    
     <article class="tile-prev"> 
      @using (Ajax.BeginForm("RemoveTileFromHistory", "Home", new { controller = "Home" }, new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "divTileHistory" }, new { })) 
      { 
       <div class="tile-prev-inner"> 
        <h1> 
         @t.Title</h1> 
        <p> 
         @t.Quote1</p> 
       </div> 

       <input type="hidden" name="archiveTileId" id="archiveTileId" value="@t.ArchiveTileId" />     
       <input id="[email protected]" type="submit" value="Delete" class="button primary small radius checkin" />      
      } 
     </article> 
    } 
</div> 

Частичный вид визуализируется на странице хозяина, как это ...

<section class="user-prev-tiles row"> 
       <h3> 
        Tiles by @Model.User.SafeUserName</h3> 
       @Html.Partial("ProfileArchiveTilesPartial", Model) 
    </section> 

И мой контроллер выглядит следующим образом. ..

[Authorize] 
public PartialViewResult RemoveTileFromHistory(string archiveTileId) 
{ 
    UserModelActions u = new UserModelActions((User as CustomPrincipal).Id); 
    u.DeleteTileFromHistory(int.Parse(archiveTileId)); 

    UserModel um = new UserModel((User as CustomPrincipal).Id); 
    return PartialView("ProfileArchiveTilesPatial", um); 
} 

Существует еще один частичный вид, который правильно обновляется на странице, поэтому я уверен, что у меня есть правильные сценарии. Мой контроллер также вызван на отправку формы правильно.

Я также считаю, что я правильно настроил идентификатор «target div».

Кто-нибудь знает, почему это может не работать?

ответ

0

Try двигая divTileHistory DIV вне парциальное на главной странице:

<section class="user-prev-tiles row"> 
    <h3>Tiles by @Model.User.SafeUserName</h3> 
    <div id="divTileHistory"> 
     @Html.Partial("ProfileArchiveTilesPartial", Model) 
    </div> 
</section> 

Кроме того, убедитесь, что модель, которую вы передаете на ваш взгляд, в RemoveTileFromHistory это с правильным количеством TileHistory коллекции. Вы можете использовать вкладку Network Google Chrome, чтобы проверить точную частичную разметку, возвращаемую действием вашего контроллера, и проверить, правильно ли это.

+0

Спасибо за предложения. Я попытался переместить div, но это не помогло. Я также наблюдал за возвращаемой моделью, глядя на нее в отладчике Visual Studio, она выглядит правильно (есть ожидаемое число в коллекции). Любые другие идеи? –

+0

Выполняет ли действие контроллера правильную разметку? Вы посмотрели вкладку «Сеть» в Google Chrome? Вот где вы можете надежно увидеть, что именно вернулось из вашего запроса AJAX. –

+0

Спасибо, ты положил меня на правильный путь. Chrome показал ошибку 500. В контроллере была опечатка. Он возвращал представление с именем «ProfileArchiveTilesPatial» вместо «ProfileArchiveTilesPartial». Легко, спасибо. –

Смежные вопросы