从控制器MVC4访问Razor视图中的控件

时间:2014-01-11 07:26:49

标签: asp.net-mvc-4 c#-4.0 razor-2

我是MVC的新手。在我的应用程序中,使用razor通过从另一个html页面设计器设计它来创建视图页面。我怀疑如何从相应的控制器访问html控件。例如,我创建一个名为Home的控制器和相应的视图。在其中添加了一个文本框。

<input id="name" type="text" name="txtName"/>

现在我想从控制器获取并设置文本框中的值而不使用脚本。 就像

txtName.text="...."

这可能吗??

2 个答案:

答案 0 :(得分:1)

听起来您正在从Web窗体的角度思考问题,例如:控件,设置服务器端属性。

MVC允许更好separation of concerns,也就是说,每个部分应该发挥其作用而不与其他部分紧密耦合。让控制器在视图中设置文本框的属性意味着该视图中必须始终存在文本框,并将控制器与该特定视图紧密耦合。它不是直接可能的,即使它是一个坏主意。

这就是视图模型的用武之地:

// M - model
public sealed class MyViewModel
{
    public string Name { get; set; }
}

// V - view
@model MyViewModel

// (usually code to begin a form goes here)

@Html.TextBoxFor( o => o.Name )

// C - controller
public ActionResult MyActionMethod()
{
    var model = new MyViewModel { Name = "Hello" };
    return View( model );
}

它可能看起来像是一个额外的步骤(它是)但它更干净,更灵活,更适合测试。

答案 1 :(得分:1)

只有对服务器的另一个请求(例如POST,GET)才有可能,因为Controller代码只能运行服务器端。处理完另一个请求后,您可以使用ViewModel在渲染时填充HTML文本框,但我怀疑这是您正在寻找的。

如果您熟悉桌面编程(例如Window的表单),并且您希望立即更改和处理HTML页面上的字段,则需要使用JavaScript。如果您不熟悉网络编程,或者甚至不熟悉MVC范例,我建议您尝试一些MSDN tutorials