Как вставить частичное представление в представление в определенном месте представления с помощью MVC3? - PullRequest
1 голос
/ 17 февраля 2012

У меня есть приложение MVC3, в которое я внедряю pjax .Все работает хорошо, за исключением того, что делать на стороне сервера, когда загружается адрес, который еще не имеет основного представления на стороне клиента.Код моего контроллера выглядит так:

public virtual ActionResult Details(Guid id)
    {
        var partDetail = new PartDetail(id);
        var partialView = PartialView("Details", partDetail);
        if(Request.Headers["X-PJAX"]!= null)
        {
            return partialView;
        }

        var mainView =  View("Index");
        // Stick Partial View into main view at #update_panel?
        return mainView;
    }

Как я могу вставить частичное представление в главное представление, чтобы оно вставило частичное представление в #update_panel?

1 Ответ

2 голосов
/ 17 февраля 2012

Хорошо, без серьезного рефакторинга вы могли бы сделать следующее.

(предполагается, что вы можете установить @model в index.cshtml на PartDetail()).

в приведенном выше действии контроллера измените:

var mainView =  View("Index");

на:

var mainView =  View("Index", partDetail);

, затем в ваш index.cshtml добавьте следующее:

<div id="update_panel">@RenderPartial("Details", Model)</div>

Как я уже сказал, это будет работать ТОЛЬКО, если для индекса @model установлено значение PartDetail(), в противном случае для включения этой модели PartDetail() потребуется небольшой рефакторинг модели в представлении индекса.эта модель представления может выглядеть следующим образом:

public class IndexViewModel
{
    ModelForIndex Index{get; set;}
    PartDetail Details{get; set;}
}

эта измененная модель представления будет добавлена ​​в index.cshtml как @model IndexViewModel и использована частичным как:

<div id="update_panel">@RenderPartial("Details", Model.Details)</div>

hopeэто имеет смысл.

...