Как включать частичное представление в веб-форме

GitLab имеет функцию специфичных для проекта ключей SSH:

Они называются Ключи развертывания . Вы можете использовать их для предоставления доступа только для чтения или для чтения / записи для одного или нескольких хранилищ.

78
задан Keith 1 July 2009 в 12:56
поделиться

2 ответа

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

В основном, чтобы это произошло, вам необходимо создать все эти дополнительные элементы. Некоторые из них относительно просты (например, данные представления), но некоторые немного сложнее - например, данные маршрутизации будут учитывать, что текущая страница WebForms игнорируется.

Большая проблема, по-видимому, заключается в страницах HttpContext - MVC полагаться на HttpContextBase (а не на HttpContext, как это делают WebForms), и хотя оба реализуют IServiceProvider, они не связаны. Разработчики MVC приняли сознательное решение не изменять устаревшие WebForms для использования новой контекстной базы, однако они предоставили оболочку.

Это работает и позволяет вам добавить частичное представление в WebForm:

public class WebFormController : Controller { }

public static class WebFormMVCUtil
{

    public static void RenderPartial( string partialName, object model )
    {
        //get a wrapper for the legacy WebForm context
        var httpCtx = new HttpContextWrapper( System.Web.HttpContext.Current );

        //create a mock route that points to the empty controller
        var rt = new RouteData();
        rt.Values.Add( "controller", "WebFormController" );

        //create a controller context for the route and http context
        var ctx = new ControllerContext( 
            new RequestContext( httpCtx, rt ), new WebFormController() );

        //find the partial view using the viewengine
        var view = ViewEngines.Engines.FindPartialView( ctx, partialName ).View;

        //create a view context and assign the model
        var vctx = new ViewContext( ctx, view, 
            new ViewDataDictionary { Model = model }, 
            new TempDataDictionary() );

        //render the partial view
        view.Render( vctx, System.Web.HttpContext.Current.Response.Output );
    }

}

Затем в вашей WebForm вы можете сделать это:

<% WebFormMVCUtil.RenderPartial( "ViewName", this.GetModel() ); %>
96
ответ дан 24 November 2019 в 10:32
поделиться

самый очевидный путь был бы через Ajax

что-то вроде этого (использование jQuery)

<div id="mvcpartial"></div>

<script type="text/javascript">
$(document).load(function () {
    $.ajax(
    {    
        type: "GET",
        url : "urltoyourmvcaction",
        success : function (msg) { $("#mvcpartial").html(msg); }
    });
});
</script>
20
ответ дан Andrew Whitaker 24 November 2019 в 10:32
поделиться
Другие вопросы по тегам:

Похожие вопросы: