【发布时间】:2011-11-22 15:00:41
【问题描述】:
我有一个 C#.Net Web 应用程序,我正在尝试访问控制器中的一个 HTML/ASP 文本框以用于我的提案模型的编辑视图。在非 MVC 应用程序中,我可以使用 Control.ControlCollection.Find() 做到这一点。是否有 MVC3 项目的等价物?
【问题讨论】:
-
您是尝试通过 HTML 中的 ID 访问文本框,还是尝试访问控制器的操作?
我有一个 C#.Net Web 应用程序,我正在尝试访问控制器中的一个 HTML/ASP 文本框以用于我的提案模型的编辑视图。在非 MVC 应用程序中,我可以使用 Control.ControlCollection.Find() 做到这一点。是否有 MVC3 项目的等价物?
【问题讨论】:
您要求在 MVC 中等效于 Control.ControlCollection.Find()?
在 MVC 中,您的控制器不知道 控件。
控制器只是通过参数接收数据,通过函数结果返回数据。
您想对控制器代码中的控件做什么?
如果你想访问这个值,你应该把它绑定到一个参数:
查看:
<input name="MyControl" type="text" />
控制器:
public ActionResult MyAction(string MyControl) {
// MyControl contains the value of the input with name MyControl
}
【讨论】:
MVC 模式旨在将事物分开。
因此,您永远无法从控制器获取有关视图中控件/标签的信息。您需要在视图中使用 javascript/jQuery 并在控制器中调用正确的操作。
【讨论】:
在 MVC 应用程序中,您没有像 webform 应用程序那样的控件。
在 MVC 中,您在控制器中收集所需的数据并将其传递给视图。
通常,该视图是一个带有嵌入代码的 HTML 页面。
与生成 HTML 并在 MVC 中处理回发的 web 表单中的控件相反,您必须手动完成所有这些操作。因此,您没有可以在控制器中轻松访问的带有属性和事件的控件,您必须使用自己的代码处理所有帖子。
这听起来需要更多的工作 - 如果您实现复杂控件的行为,确实可能是这样 - 但 MVC 应用程序更易于维护,并且您对生成的 HTML 有 100% 的影响。
【讨论】:
好吧,我可能迟到了,但它应该在未来帮助其他人......你可以将你的值存储在视图中的隐藏字段中,然后通过以下代码在控制器中访问该值..
Request.Form["hfAnswerOrder"].ToString();
Point - hfAnswerOrder 是隐藏字段的ID
我在 cshtml 页面中的控件..
@Html.Hidden("hfAnswerOrder", Model.Answers.ToList()[0].AnswerOrder)
【讨论】: