2013-04-09 4 views
2

У меня есть _Layout.cshtml, содержание:Refresh раздел при использовании PartialView

... 
@RenderSection("MyTitle", required: false) 
<div class="innerLR"> 
    <div id="appContent"> 
    @RenderBody() 
    </div> 
</div> 
... 

При запуске приложения, я иду к этому действию Home/Index, вид

public ActionResult Index() 
{ 
    return View(new BaseModel { Title = "Testing"}); 
} 

The View Index.cshtml :

@section MyTitle{ @Model.Title } 
bla bla bla 

В это время это нормально, я вижу: T esting + bla bla bla.

Теперь я звоню Home/SecondAction через Ajax, когда я нажимаю на ссылку, контроллер возвращает PartialView и diplay содержимое в appContent div. Я называю так:

$.ajax({ 
    url: 'Home/SecondAction', 
    type: 'POST', 
    data: {}, 
    success: function (result) { 
     $(#appContent).html(result); 
    } 
}); 

Действия:

public ActionResult SecondAction() 
{ 
    return PartialView(new BaseModel { Title = "Other Title" }); 
} 

SecondAction.cshtml является:

@section MyTitle{ @Model.Title } 
bla bla again 

Вот что это не работает, я бы какая-то ошибка, но я может ли текст от первого действия, а не:

Другое Tit ла-бла-бла снова

Чтобы возобновить Я хотел бы, когда я возвращаю PartialView вынести раздел из _Layout.cshtml

Спасибо,

ответ

2

Вы, кажется, пытается обновить 2 различных разделов ваш DOM после вызова AJAX.После того, как возможность добиться того, чтобы ваш контроллер действий вернуть обработанную результат 2 обертонов в формате JSON:

public ActionResult SecondAction() 
{ 
    return Json(new 
    { 
     section1 = RenderPartialViewToString("_Partial1", null), 
     section2 = RenderPartialViewToString("_Partial2", new BaseModel { Title = "Other Title" }), 
    }); 
} 

и ваш вызов AJAX теперь может выглядеть следующим образом:

$.ajax({ 
    url: 'Home/SecondAction', 
    type: 'POST', 
    success: function (result) { 
     // TODO: you should of course wrap the contents of section 1 in a div with 
     // id="section1" in your _Layout.cshtml 
     $('#section1').html(result.section1); 

     $('#appContent').html(result.section2); 
    } 
}); 

Теперь вы, вероятно, интересно где находится метод RenderPartialViewToString? Он исходит от here. Или от here если хотите.

+0

Спасибо Дарин и извините за «пробуждение электронной почты» :) –

0

использование firebug и посмотреть в консоли ошибок или веб-инструментов Chrome (ударил F12 в хроме),

должно быть $('#appContent').html(result);

убедитесь, что вы IndexPartial View

убедитесь, что этот вид не использует Masterpage/Layout

+0

Результат моего взгляда для меня правильный, верните мне «bla bla again» и все остальное. #appContent обновляется, но не раздел –

0

Я видел ваш код глубоко вы звоните SecondAction в $ .ajax т.е.: url: 'Home/SecondAction'. Но ваше действие имя метода IndexPartial т.е.

public ActionResult IndexPartial() 
{ 
    return PartialView(new BaseModel { Title = "Other Title" }); 
} 

Пожалуйста, измените ваше заявление $ .ajax так:

$.ajax({ 
    url: 'Home/IndexPartial', 
    type: 'POST', 
    data: {}, 
    success: function (result) { 
     $(#appContent).html(result); 
    } 
}); 

Благодаря

+0

Небольшая ошибка при подготовке этого сообщения. Позвольте мне исправить это. Но это не ошибка. –

+0

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

+0

В firebug нет ошибки, только раздел MyTitle не обновляется, когда я нажимаю ссылку, чтобы перейти во второе действие. При первом действии раздел обновляется, а во втором - нет. –

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