在单击提交按钮时从asp.net mvc文本框获取值

6

如何在asp.net mvc中检索文本框的值以将其存储到某个变量中?

我在首页视图页面上有一个像这样的文本框:<%=Html.TextBox("testbox") %>

我有一个按钮,像这样:<input type="submit" />

我正在使用打开新的mvc应用程序时出现的默认视图页面。

谢谢。

1个回答

8

在你的控制器中:

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search(FormCollection collection)
{
  String g = collection["textFieldname"]
}

或者你可以使用:
TryUpdateModel(modelName);

上述是首选解决方案。如果您需要更多关于TryUpdateModel的信息,请发表评论,我会为您补充细节。
编辑:不必解释,让我简单地向您展示;在您的控制器中:
public class MyFormViewModel
{
  public string myInput {get; set;}
}

public ActionResult Search()
{
  MyFormViewModel fvm = new MyFormViewModel();
  return View(fvm);
}

[AcceptVerbs(HttpVerbs.Post)]
public ActionResult Search(FormCollection collection)
{
  MyFormViewModel fvm = new MyFormViewModel();
  TryUpdateModel<MyFormViewModel>(fvm);

  string userInput = fvm.myInput;
}

如果在您的视图中;

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<YOURNAMESPACE.Controllers.MyFormViewModel>" %>

<%= Html.TextBox("myInput", Model.myInput) %>

请注意两件事情。
页面继承自控制器中定义的模型/类。虽然不是最好的地方,但作为一个例子,它可以使用。
另一件事是文本框的名称与模型中的属性相同。在这种情况下,它是myInput。
当控制器执行UpdateModel时,它会反射出来,并将文本框名称与表单视图模型中字段的名称匹配。
有意义吗?
编辑2
还要记得在按钮和字段中加上;
<% using (Html.BeginForm()) {%>

嗨,谢谢回复...请告诉我如何尝试更新模型(modelname)与视图上的文本框有何关系...谢谢。 - Josh
看了一遍...我理解了... 但这里...<%= Html.TextBox("myInput", Model.myInput) %>,Model.myInput 会自动映射到 myFormViewModel.myinput 吗?我认为这就是你指出的使用反射自动解析获取相关类名...有点让人头晕,因为在视图中称其为“Model.MyInput”...但我想我写代码时它会工作。 - Josh
我的意思是它怎么知道哪个模型......以及在哪里......这就是我所想的。 - Josh
1
你是正确的。框架将会把文本框名称映射到模型属性。在文本框调用中,您不需要使用textbox("myInput", Model.myInput...第二个参数是用于为该字段提供初始值的。当执行验证等操作时,您将进入这个领域。控件的名称在这里是重要的。 - griegs
1
它知道模型是因为页面继承自该模型。就像 Inherits="System.Web.Mvc.ViewPage<YOURNAMESPACE.Controllers.MyFormViewModel>" 一样。 - griegs
嗨,非常感谢。你在帮助我学习MVC方面扮演了重要的角色。 - Josh

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接