gpt4 book ai didi

asp.net - 如何在网络表单中包含部分 View

转载 作者:行者123 更新时间:2023-12-03 05:15:08 25 4
gpt4 key购买 nike

我正在编程的某些网站同时使用 ASP.NET MVC 和 WebForms。

我有一个部分 View ,我想将其包含在网络表单中。部分 View 有一些必须在服务器中处理的代码,因此使用 Response.WriteFile 不起作用。它应该在禁用 JavaScript 的情况下工作。

我该怎么做?

最佳答案

我查看了 MVC 源代码,看看是否能弄清楚如何做到这一点。 Controller 上下文、 View 、 View 数据、路由数据和 html 渲染方法之间似乎存在非常紧密的耦合。

基本上,为了实现这一点,您需要创建所有这些额外的元素。其中一些相对简单(例如 View 数据),但有些则稍微复杂一些 - 例如路由数据会考虑忽略当前的 WebForms 页面。

最大的问题似乎是 HttpContext - MVC 页面依赖于 HttpContextBase(而不是像 WebForms 那样的 HttpContext),虽然两者都实现了 IServiceProvider,但它们并不相关。 MVC 的设计者经过深思熟虑后决定不更改旧版 WebForms 以使用新的上下文库,但他们确实提供了一个包装器。

这可以工作并允许您向 WebForm 添加部分 View :

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() ); %>

关于asp.net - 如何在网络表单中包含部分 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/702746/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com