从MVC3中的代码中访问html标记

时间:2012-01-11 18:39:22

标签: asp.net html asp.net-mvc-3 intellisense code-behind

我正试图在视觉工作室2008中合并两个项目

我试图引入的项目的风格类似于旧学校的asp.net项目,使用设置后面的代码访问页面加载方法等等,但其他项目是新的MVC3样式项目。

现在我完全清楚这两个项目的映射方式不同,很可能不应该放在一起,但如果我听了所有被告知不要做的事情,我就不会有坏屁股纹身一个天使在我的左屁股脸上吃着一条热狗。

现在,当我谈到将这两者合并在一起时,我真正谈论的是将.aspx类型的1个视图引入我的MVC3项目并使其与其他视图一起运行。我已经能够把它带进来,我在它的控制器设置中有一个功能,我有它的代码背后正确链接,每个东西似乎都是一个去,但intellisense不认识到有html标签它们上面的id和runat服务器属性将成为我后面代码中的对象。它一直告诉我声明这些变量。

对于屎和笑声,我确实尝试声明它们,此时intellisense微笑着给了我一个眼色,然后通过警告我在解析页面时已经准备好所有变量已经宣布已经准备好了所有已经准备好的声明。 p>

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

Edit2:好像这样的设置,就像我上面说的那样使用vs2008所以它有视图模型和控制器文件夹,你放置三个独立的区域我有一个特定的视图来自另一个正在使用的项目使用CodeBehind =“Default.aspx.cs”参数将代码文件附加到.aspx文件的方法背后的旧代码,所以我从旧项目中使用它的代码隐藏文件将此.aspx文件拉出来并将其粘贴到新的MVC3项目,并告诉他们共存很像一个成年人告诉孩子不要在嘴里贴东西(只是因为你告诉他们并不意味着会有)。但是文件后面的旧代码使用了一个页面加载函数,它必须从某个库中初始化一些html标签,但我当然无法访问这些标签,而且它们没有html帮助器或任何酷酷的东西。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:3)

这不是MVC的工作方式。从控制器的角度来看,它知道关于视图的 nothing 。它们之间没有双向通信,它们不是从单个基础派生的(如WebForms那样)等。控制器动作执行一些逻辑,构建一个视图模型(可选),并发送该视图模型(可选)到了视野。一种方式,不回头。

所以不要这样:

TextBox1.Text = "foo";

你在控制器动作中做了类似的事情:

myViewModel.SomeTextField = "foo";

然后,在视图中,您将在viewmodel上访问该值:

@Html.TextBox("name", Model.SomeTextField)

控制器永远不应该必须永远不会绑定到视图。通过设计,操作方法可以将控制权传递给您想要的任何视图。它们不像WebForms那样绑定到“页面”。

这是一种关注点的分离,一种控制的反转,所有那些好东西。控制器构建一个对象并将其发送到一个视图,任何视图都无关紧要。该视图需要来自 a 控制器的视图模型,任何控制器都无关紧要。

答案 1 :(得分:0)

我找到了解决方案,我需要做的就是访问这些标签,使用FindControl()函数,在代码隐藏文件旁边,就是这么简单,现在就像一个冠军一样运行。 所以我所拥有的是一个像

这样的控件的视图
<button id="foo" runat="server">

然后当然我有一个带有功能的控制器

public ActionResult Index()
{
    Return View();
}

最后我的代码背后包含

protected void Page_Load(object sender, EventArgs e)
{
    ((Button)This.FindControl("foo")).DoSomething();    
}

易腻的柠檬挤压。

感谢你帮助任何人