【问题标题】:Accessing controls in Razor view from controller MVC4从控制器 MVC4 访问 Razor 视图中的控件
【发布时间】:2014-01-11 07:26:48
【问题描述】:
我是 MVC 的新手。在我的应用程序中,使用剃刀创建的视图页面是通过另一个 html 页面设计器设计的。我怀疑如何从相应的控制器访问 html 控件。例如,我创建了一个名为 Home 的控制器和相应的视图。在其中添加了一个文本框。
<input id="name" type="text" name="txtName"/>
现在我想在不使用脚本的情况下从控制器获取和设置文本框中的值。
就像
txtName.text="...."
这可能吗..?
【问题讨论】:
标签:
asp.net-mvc-4
c#-4.0
razor-2
【解决方案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 );
}
这似乎是一个额外的步骤(确实如此),但它更简洁、更灵活、更适合测试。
【解决方案2】:
只有对服务器的另一个请求(例如 POST、GET)才有可能,因为控制器代码只能在服务器端运行。处理另一个请求后,您可以使用 ViewModel 在呈现 HTML 文本框时填充它,但我怀疑这就是您要寻找的。p>
如果您熟悉桌面编程(例如 Window 的表单)并且希望立即更改和处理 HTML 页面上的字段,则需要使用 JavaScript。如果您不熟悉 Web 编程,或者只是刚接触 MVC 范例,我建议您尝试一些 MSDN tutorials。