Ajax.BeginForm не обновляет целевой div - PullRequest
0 голосов
/ 07 марта 2012

Контроллер:

public ActionResult Edit(string temp)
{
     ViewBag.Time = DateTime.Now.ToString("hh:mm:ss");
     return PartialView("Edit");
}

Частичное представление:

@using (Ajax.BeginForm("Edit", "Home", new AjaxOptions{UpdateTargetId = "mydiv"}))
    {
        <input type="submit" value="Save" />
    }

Индекс (часть содержания)

<div id="mydiv">
    <span>The Time is: @ViewBag.Time</span>
</div>
@Html.Partial("Edit")

ClientValidationEnabled и UnobtrusiveJavaScriptEnabled являются true jquery.validate.min.js, jquery.validate.unobtrusive.min.js, jquery.unobtrusive-ajax.min.js, MicrosoftMvcAjax.js и MicrosoftAjax.js добавлены

Сначала время отображается правильно. При первом нажатии кнопки «Сохранить» время исчезает, и дважды отображается кнопка «Сохранить», а затем ничего не происходит, кроме вызова действия при нажатии на обе кнопки.

Ответы [ 2 ]

2 голосов
/ 07 марта 2012

У вас есть вещи вроде назад. Попробуйте это:

Контроллер

public ActionResult Edit(string temp)   
{  
    ViewBag.Time = DateTime.Now.ToString("hh:mm:ss");  
    return PartialView("Edit");   
}

Индекс

@using (Ajax.BeginForm("Edit", "Home", new AjaxOptions{UpdateTargetId = "mydiv"}))     
    {     
        <input type="submit" value="Save" />     
    }            
@Html.Action("Edit") 

Частичное представление (правка)

<div id="mydiv">
    <span>The Time is: @ViewBag.Time</span> 
</div>

ViewBag доступен только во время выполнения (при начальной загрузке страницы), так что это означает, что если вы извлекаете данные через ajax, viewbag в действии контроллера доступен только для частичного представления этого действия контроллера (но не index.cshtml). который вызвал действие через ajax). Короче говоря (tl; dr), чтобы иметь возможность использовать пакет просмотра, который вы установили в действии Edit, вы должны использовать его в возвращаемом частичном представлении. (и нигде больше, потому что содержимое не перерисовывается механизмом бритвы)

0 голосов
/ 07 марта 2012
I set things up like so. 

Очень просто, но я заметил, что у человека, отправляющего вопрос, и ответа не было режима вставки, поэтому я разместил этот хромой код:)

 {
                                                                            HttpMethod = "post",
                                                                            InsertionMode = InsertionMode.Replace,
                                                                            UpdateTargetId = "the div youwant to update / replace"
                                                                        } 
...