Luc*_*Luc 5 asp.net-mvc code-behind asp.net-mvc-routing
首先,我要说明我知道在我的视图中访问服务器端控件在MVC中是不受欢迎的.但是,我需要在我的情况下(据我所知).这是我的故事.:)
我有一个第三方控件,我在我的Web应用程序中使用.我目前被赋予了将WebForms解决方案移植到MVC的任务.这个特定的第三方Web控件需要WebForms体系结构,因此我希望只使用WebForms项目中的相同代码.
我最初的方法是拥有两个网站(一个WebForms网站和一个MVC网站),然后使用来自MVC端的iFrame链接这两个网站.虽然我知道这会起作用,但使用这个特殊控件只是有点过分.经过更多的研究,我发现我可以"混合男孩们"并在MVC项目中使用WebForms架构.因此,我采用的新方法是仅将使用此第三方控件的页面复制到特定目录(即'View\SomeDir\WebForms'),然后忽略我的global.asax文件中的该目录,以便MVC路由系统没有拿起它:
routes.IgnoreRoute("View\SomeDir\WebForms\{*pathInfo}");
Run Code Online (Sandbox Code Playgroud)
不幸的是,当我将ASPX页面复制到我的MVC项目时,我发现CodeBehind不允许我访问我在页面上的控件.以下是设置方式:
<%@ Register
Assembly="..."
Namespace="..."
TagPrefix="custom" %>
<custom:SomeControl ID="customControl" runat="server" />
Run Code Online (Sandbox Code Playgroud)
这是我的代码背后的样子:
public class MyPage : Page
{
protected void Page_Load(object sender, EventArgs args)
{
Debug.WriteLine(customControl.ID); // <-- COMPILE ERROR: Cannot resolve symbol 'customControl'
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是我的项目甚至不会编译,因为我在CodeBehind的每个控件上都出现了这个错误.将其他控件(即标签,面板,文本框等)转换为客户端标签不是问题,但我需要在我的代码中访问此自定义控件,以便我可以收听它(服务器端) )事件并作出相应的反应; 基本的WebForms东西......
我正在努力做甚么可能吗?我想到的另一种方法might
是初始化并捕获控制器类中的服务器端事件.但是,我想避免在视图中序列化控件的状态,只是将其传递给控制器并尽可能返回?
提前感谢任何建议!
哇靠!!我发布此消息后10分钟,我找到了解决方案.
修复是右键单击我的项目并说"转换为Web应用程序"并将我的CodeBehind类更改回"部分".现在可以通过后面的代码访问我的所有控件.
感谢阅读,我希望我的问题/答案有一天会帮助别人.:)
归档时间: |
|
查看次数: |
2103 次 |
最近记录: |