2013-04-12 6 views
1

Я пытаюсь обновить частичный вид внутри представления при отправке формы. Тем не менее, всякий раз, когда я пытаюсь, он просто отображает частичное представление как нормальное представление. Может ли кто-нибудь сказать мне, что я делаю неправильно?Оказание частичного представления внутри представления с использованием AJAX

Контроллер:

public ActionResult ChangeHeatName(string heatName, string updatedHeat) 
    { 
     string user = User.Identity.Name; 
     HomeModel H = new HomeModel(); 
     H.ChangeHeatName(heatName, updatedHeat, user); 
     ChemViewModel mySlagViewModel = new ChemViewModel(); 
     mySlagViewModel = H.QueryResults(heatName); 

     return PartialView("PartialChemAnalysis", mySlagViewModel); 
    } 

Частичная форма вида (содержащаяся в частичном виде, не является основным вид):

@using (Ajax.BeginForm("ChangeHeatName", "Home", new AjaxOptions(){UpdateTargetId = "chemDiv" InsertionMode = InsertionMode.Replace})) 
{ 
    <section> 
     Heat Name:<input type="text" name="heatName" value="@Html.ValueFor(x => x.heatname)" style ="width:100px"/> 
     Change to:<input type="text" name="updatedHeat" value="" style="width: 100px" /> 
     <input type="submit" name="ChangeHeatName" value="Change" /> 
    </section> 
} 

Индексных где частичный вид визуализируются:

@if(ViewBag.SearchKey == null) 
{ 
    <div class="content-wrapper"> 
     <hgroup class="title"> 
      <h1>@HttpContext.Current.User.Identity.Name</h1> 
      <h2>@ViewBag.Message</h2> 
     </hgroup> 
    </div> 
} 

@using (Html.BeginForm("Index", "Home", "POST")) 
{ 
<div class="searchField"> 
    <input type="text" class="search-query" name="heatSearch" placeholder="Search"> 
     <button class="btn btn-success" type="submit">Search</button> 
    <br /> 
    @if (ViewBag.AverageSuccessful == true) 
    { 
     <input type="text" name="AvgConfirmation" class="search-query" value="Average Submitted Successfully" width:"400px" placeholder="Search" /> 
    } 
</div> 
} 

@if(ViewBag.SearchKey != null) 
{ 
    <div> 
    <div id ="chemDiv"> 
    @Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey) 
    </div> 

    <div id ="slafDiv"> 
    @Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey) 
    </div> 
    </div> 

} 

Контроллер индекса, который передает SearchKey:

[HttpPost] 
    public ActionResult Index(string heatSearch) 
    { 
     ViewBag.SearchKey = heatSearch; 

     return View(); 
    } 
+0

Форма отправляет запрос на действие частичного просмотра ('ChangeHeatName'). Все это действие возвращает частичный вид, поэтому вы не видите полный вид. Вы должны отправить 'GET' формы в действие, которое возвращает полный вид, и вызвать частичный вид из этого представления. –

+0

Я бы также добавил InsertionMode.Replace в качестве следующего параметра ваших ajaxoptions. Поэтому он читал бы: новый AjaxOptions {UpdateTargetId = "chemDiv", InsertionMode = InsertionMode.Replace} –

+0

@AndreCalil Спасибо за совет. Я попытался вызвать полный вид, который отображает частичное представление. Таким образом, мое заявление о возврате выглядело как return View («Index», heatName) Но он просто вернул меня к этому виду без частичного визуализированного представления. –

ответ

0

Публикация этого, потому что это не интуитивно понятное исправление. По-видимому, есть проблемы с MVC 4 и jQuery 1.9.1, поэтому, чтобы заставить это работать, мне пришлось изменить мою ссылку на jQuery 1.7.1

+0

Я не уверен, что я вижу, как это исправит корень вашей проблемы с кодом, который вы разместили выше. –

1

В настоящее время ваш ajax.beginform находится в вашем частичном представлении, все это прекрасно и денди, но ваше частичное представление не отображается внутри вашего индекса, поэтому на самом деле вы никогда не делаете логику замены ajax, вы просто вызываете метод действия и получить полное обновление страницы частичного просмотра.

вот что будет работать.

@if(ViewBag.SearchKey != null) 
{ 
    <div> 
     <div id ="chemDiv"> 
      @Html.Partial("ChangeHeatName") 
     </div> 

     <div id ="slafDiv"> 
      @Html.Action("PartialSlagView", "Home", (string)ViewBag.SearchKey) 
     </div> 
    </div> 
} 

Теперь ваш Ajax.BeginForm отображается в индексном, и при нажатии на кнопку он будет обновляться.

Редактировать: вам нужно что-то сделать с @Html.Action("PartialChemAnalysis", "Home", (string)ViewBag.SearchKey), возможно, придерживаться его в частичном представлении, потому что все в «chemDiv» теперь будет заменено при обновлении.

1

Вы не указали POST в Ajax.BeginForm(). Попробуйте это:

@using (Ajax.BeginForm("ChangeHeatName", "Home", FormMethod.Post, 
new AjaxOptions(){UpdateTargetId = "chemDiv" InsertionMode = InsertionMode.Replace})) 
{...} 

Кроме того, придерживаться точки останова на ваши действия контроллера и шаг через него, увидеть, если он на самом деле удара return PartialView() или пропуская над ним.

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