Asp.net 从MVC3中的代码隐藏中访问html标记

Asp.net 从MVC3中的代码隐藏中访问html标记,asp.net,html,asp.net-mvc-3,intellisense,code-behind,Asp.net,Html,Asp.net Mvc 3,Intellisense,Code Behind,我正在尝试合并visual Studio 2008中的两个项目 我尝试引入的项目的样式类似于老式的asp.net项目,使用代码隐藏设置来访问页面加载方法等,但其他项目是新型的MVC3样式的项目 现在我完全意识到,这两个项目在访问方面的映射不同,很可能不应该放在一起,但如果我听了别人告诉我不要做的每一件事,我就不会有天使在我左屁股脸颊上吃热狗的坏屁股纹身 现在,当我谈论将这两个视图合并在一起时,我真正谈论的是将.aspx类型的1个视图引入到我的MVC3项目中,并使其与其他视图一起运行。我已经能够将

我正在尝试合并visual Studio 2008中的两个项目

我尝试引入的项目的样式类似于老式的asp.net项目,使用代码隐藏设置来访问页面加载方法等,但其他项目是新型的MVC3样式的项目

现在我完全意识到,这两个项目在访问方面的映射不同,很可能不应该放在一起,但如果我听了别人告诉我不要做的每一件事,我就不会有天使在我左屁股脸颊上吃热狗的坏屁股纹身

现在,当我谈论将这两个视图合并在一起时,我真正谈论的是将.aspx类型的1个视图引入到我的MVC3项目中,并使其与其他视图一起运行。我已经能够将它引入,我在控制器中为它设置了一个函数,并且它的代码在那里被正确链接,每件事情似乎都是一个go,但是intellisense没有意识到在它们上有id和runat server属性的html标记将是我代码中的对象。它一直告诉我要声明这些变量

对于大便和傻笑,我确实尝试过声明它们,这时intellisense微笑着向我眨了眨眼,然后提醒我在解析页面时变量已经声明好了,这让我的希望落空


编辑:控制器正在执行它自己的任务,正如我前面所说的,后面的代码正在处理页面加载功能,在旧的设置中,您可以直接访问使用runat服务器属性的任何html标记,我正在尝试将其与MVC3一起复制,而不是将其全部放在控制器中。为了澄清这一点,我有一个模型、视图、控制器,然后在我的视图中有一个名为filename.aspx.cs的代码页,这有帮助吗

Edit2:OK对于这个设置,就像我上面说的,我们使用vs2008,因此它有视图模型和控制器文件夹,您可以在其中放置三个单独的区域。我有一个来自另一个项目的特定视图,该项目使用旧的代码隐藏方法,即通过使用codebeard=“Default.aspx.cs”将代码文件附加到.aspx文件参数,所以我从旧项目中提取了这个.aspx文件及其代码隐藏文件,并将其插入新的MVC3项目中,并告诉它们共存,就像成年人告诉孩子不要把东西塞进嘴里一样(只是因为你告诉他们不意味着会有东西)。但是旧的代码隐藏文件使用了一个页面加载函数,该函数必须初始化某个库中的一些html标记,但是我当然不能访问这些标记,而且它们没有html助手或任何类似的东西


任何帮助都将不胜感激。

MVC不是这样工作的。从控制器的角度来看,它对视图一无所知。它们之间没有双向通信,它们不是从单个基础派生的(像WebForms一样),等等。控制器操作执行一些逻辑,构建一个viewmodel(可选),并将该viewmodel(可选)发送到视图。单程,不能回头

因此,不要像这样:

TextBox1.Text = "foo";
您可以在控制器操作中执行以下操作:

myViewModel.SomeTextField = "foo";
然后,在视图中,您可以在viewmodel上访问该值:

@Html.TextBox("name", Model.SomeTextField)
控制器不应该,也决不能绑定到视图。根据设计,动作方法可以将控制权传递给您想要的任何视图。它们不会像WebForms那样绑定到“页面”


这是一个分离的关注点,一个控制反转,所有这些好东西。控制器构建一个对象并将其发送到一个视图,不管是哪个视图。视图需要一个来自控制器的viewmodel,任何控制器,不管是哪一个。

我找到了解决方案,访问这些标记所需要做的就是使用FindControl()函数,在代码隐藏文件中,就这么简单,现在运行起来像个冠军。 所以我看到的是一个控制像

<button id="foo" runat="server">
最后我有一个代码,它包含

protected void Page_Load(object sender, EventArgs e)
{
    ((Button)This.FindControl("foo")).DoSomething();    
}
容易的豌豆柠檬挤压


感谢各位的帮助,控制器正在执行自己的任务,正如我前面所说的,后面的代码正在处理页面加载功能,在旧的设置中,您可以直接访问使用runat服务器属性的任何html标记,我正试图将此与MVC3一起复制,我不想把它都放在控制器里。为了澄清这一点,我有一个模型、视图、控制器,然后在我的视图中我有一个名为filename.aspx.cs的代码页,这有帮助吗?@Warped:我不知道你说的“在我的视图中我有一个代码页的aspx页”是什么意思。你能创建一个小例子来说明这一点,并将其张贴在问题中吗?从这篇评论的声音来看,感觉就像你试图以不自然的方式将这两种范式结合起来,这将导致既不是MVC也不是WebForms的东西(这将是一场维护的噩梦)。噩梦是的!,但我不必维护它,一旦我有了这个工作它很好去,不必再被触摸。我将对我上面的具体问题给出一些更深入的见解。但是创建一个例子是很困难的,因为设置有多么奇怪。@Warped:注意注释中的几点。。。“不必再被触碰”——以我的经验,这是一个谎言。软件需要维护。永远不要在设计软件时假设它不会被维护。“很难做到,因为设置有多奇怪”-这表明你的做法是错误的。喜欢简单。按照预期的方式使用工具。等等。我不能,另一个视图只作为旧式的asp.net项目出现。按照惯例,MVC中应该没有代码。一个很好的起点是。如果我是你,我会开始做我被告知的事情:)我完全意识到这一点,但我只能将此视图作为一个旧项目,它需要访问
protected void Page_Load(object sender, EventArgs e)
{
    ((Button)This.FindControl("foo")).DoSomething();    
}