2013-05-23 2 views
2

В моей ASP MVC3 просмотра я использую следующий Ajax вызов, чтобы получить частичный вид и добавить парциальное к конкретному fieldsetЧастичный вид на возвращение общей макет страницы, а

Ajax

$("#addItem").click(function() { 
     alert("here"); 
     $.ajax({ 
      url: '@Url.Action("BlankDropDownItem", "DropDownValues")', 
      dataType: 'html', 
      cache: false, 
      success: function (html) { 
       alert(html); 
       $("#items").append(html); 
      } 
     }); 
     return false; 
    }); 

Этот Ajax вызывает очень простой метод контроллера ViewResult, который должен возвращать частичный вид.

Контроллер

public ViewResult BlankDropDownItem() 
    { 
     return View("DropDownItemPartial", new DropDownValues()); 
    } 

Это весь код в парциальное. Когда я создал его в VS 2010 (я сделал это дважды сейчас, чтобы убедиться), я установил флажок «Частичный просмотр», который выделяет параметр «Использовать общий макет».

Частичный вид

@model Monet.Models.DropDownValues 
<div class="editor-label"> 
    @Html.LabelFor(model => model.AllowedValue) 
</div> 
<div class="label-field"> 
    @Html.EditorFor(model => model.AllowedValue) 
    @Html.ValidationMessageFor(model => model.AllowedValue) 
</div> 
<div class="editor-label"> 
    @Html.LabelFor(model => model.DisplayValue) 
</div> 
<div class="label-field"> 
    @Html.EditorFor(model => model.DisplayValue) 
    @Html.ValidationMessageFor(model => model.DisplayValue) 
</div> 

По какой-то причине, когда я положить alert на html объекта, возвращенного в этой строке функции Ajax success

success: function (html) { 

Я вижу, что html объект возвращает весь HTML из общего макета, поэтому он по существу возвращает целую страницу вместо частичного представления. Вот скриншот того, как он выглядит, как только вызов Ajax завершен.

enter image description here

ответ

5

Я думаю, что у Вас есть один небольшой "легко пропустить" синтаксический вопрос: D

У вас есть:

public ActionResult BlankDropDownItem() 
{ 
    return View("DropDownItemPartial", new DropDownValues()); 
} 

Вы должны иметь:

public ActionResult BlankDropDownItem() 
{ 
    return PartialView("DropDownItemPartial", new DropDownValues()); 
} 

Надеюсь, это поможет!

+0

Удивительно, спасибо! FYI, это должен быть тип возврата ActionResult. Он не будет компилироваться с помощью 'ViewResult'. – NealR

+0

Ха-ха, да, да! : D полностью просто скопировал ваш текст. Рад, что смог помочь! – technicallyjosh

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