2012-03-07 4 views
0

Контроллер:Ajax.BeginForm не обновляет целевую Див

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" /> 
    } 

Index View (часть содержания)

<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 добавляют

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

+0

Вы можете установить InsertionMode заменить, а – CrazyCoderz

ответ

2

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

Контроллер

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

Index Просмотр

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

Частичный вид (Edit)

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

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

+1

Хотя я не пробовал ваше решение, но то, что является устаревшим здесь ?. Почему can not у меня есть форма внутри моего частичного представления и обновление div в представлении индекса? Какова логика? – bjan

+0

Потому что 1. Почему вы хотите получить форму несколько раз? Форма никогда не изменяется, форма не имеет разных данных каждый раз, когда вы ее извлекаете, ее всегда одни и те же данные. Вот почему вы могли бы также иметь его в главном представлении, а не в представлении, которое извлекается через ajax. 2. ViewBag доступен только во время выполнения (когда страница первоначально загружается), поэтому это означает, что если вы извлекаете данные через ajax, viewbag в действии контроллера доступен только для частичного представления этого действия контроллера (а не index.cshtml, который вызванное действием через ajax) – tskulbru

+0

Короче говоря (tl; dr), чтобы иметь возможность использовать сумку просмотра, установленную в действии «Редактировать», вам необходимо использовать ее в возвращаемом частичном просмотре.(а не где-нибудь еще) – tskulbru

-1
I set things up like so. 

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

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

Нет, это не работает, такое же поведение – bjan

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