【问题标题】:MVC3 Finding a control by its NameMVC3 按名称查找控件
【发布时间】:2011-11-22 15:00:41
【问题描述】:

我有一个 C#.Net Web 应用程序,我正在尝试访问控制器中的一个 HTML/ASP 文本框以用于我的提案模型的编辑视图。在非 MVC 应用程序中,我可以使用 Control.ControlCollection.Find() 做到这一点。是否有 MVC3 项目的等价物?

【问题讨论】:

  • 您是尝试通过 HTML 中的 ID 访问文本框,还是尝试访问控制器的操作?

标签: asp.net-mvc-3 findcontrol


【解决方案1】:

您要求在 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
}

【讨论】:

  • @Jan....是的,你是对的。措辞不好的问题。我想要做的是设置一些默认值。脑抽筋。我现在正在为模型的属性分配默认值....
【解决方案2】:

MVC 模式旨在将事物分开。

  • 视图根本不知道控制器
  • Controller 只知道视图存在以及它需要什么样的数据。它不知道如何渲染数据。

因此,您永远无法从控制器获取有关视图中控件/标签的信息。您需要在视图中使用 javascript/jQuery 并在控制器中调用正确的操作。

【讨论】:

    【解决方案3】:

    在 MVC 应用程序中,您没有像 webform 应用程序那样的控件。
    在 MVC 中,您在控制器中收集所需的数据并将其传递给视图。 通常,该视图是一个带有嵌入代码的 HTML 页面。
    与生成 HTML 并在 MVC 中处理回发的 web 表单中的控件相反,您必须手动完成所有这些操作。因此,您没有可以在控制器中轻松访问的带有属性和事件的控件,您必须使用自己的代码处理所有帖子。
    这听起来需要更多的工作 - 如果您实现复杂控件的行为,确实可能是这样 - 但 MVC 应用程序更易于维护,并且您对生成的 HTML 有 100% 的影响。

    【讨论】:

      【解决方案4】:

      好吧,我可能迟到了,但它应该在未来帮助其他人......你可以将你的值存储在视图中的隐藏字段中,然后通过以下代码在控制器中访问该值..

      Request.Form["hfAnswerOrder"].ToString();
      

      Point - hfAnswerOrder 是隐藏字段的ID

      我在 cshtml 页面中的控件..

      @Html.Hidden("hfAnswerOrder", Model.Answers.ToList()[0].AnswerOrder)
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-04-23
        • 2011-05-27
        • 2010-10-12
        相关资源
        最近更新 更多