Asp.net mvc 3 在操作方法中检索表单数据:ASP.NET MVC 3

Asp.net mvc 3 在操作方法中检索表单数据:ASP.NET MVC 3,asp.net-mvc-3,forms,post,actionmethod,Asp.net Mvc 3,Forms,Post,Actionmethod,我试图使用一个只有一个文本字段的简单表单来获取一些信息,这些信息将在一个动作方法中使用,以重定向到另一个动作方法。以下是上下文: 我在global.asax.cs文件中映射了一条路线,该文件按给定的次数打印“moo”。例如,如果您键入“www.cows.com/Moo8”,“Moo”将被打印8次。该数字是任意的,将在URL中打印任意多个“Moo”作为数字。我在主页上还设置了一个表格,如下所示: @using (Html.BeginForm("Moo", "Web")) { <tex

我试图使用一个只有一个文本字段的简单表单来获取一些信息,这些信息将在一个动作方法中使用,以重定向到另一个动作方法。以下是上下文:

我在global.asax.cs文件中映射了一条路线,该文件按给定的次数打印“moo”。例如,如果您键入“www.cows.com/Moo8”,“Moo”将被打印8次。该数字是任意的,将在URL中打印任意多个“Moo”作为数字。我在主页上还设置了一个表格,如下所示:

@using (Html.BeginForm("Moo", "Web"))
{
    <text>How many times do you want to moo?</text>
    <input type="text" name="mooNumber" />
    <input type="submit" value="Moo!" />
}
最后,“Moo”操作方法应该将我送回原来的“www.cows.com/Moo8”页面;正如您在上面所看到的,我只是使用了一个已经存在的操作方法“ExtendedMoo”:


我如何访问表单中提交的值,并在最后一次调用“ExtendedMoo”时使用它?

请参阅,或者,您可能会了解路由的工作原理。
“www.cows.com/Moo8”
有问题,请找出原因。提示
“{controller}/{action}/{parameter_或_id}”
使用
重定向
并创建Url,而不是
重定向到操作。
这应该可以做到:

return Redirect(Url.RouteUrl(new { controller = "Web", action = "ExtendedMoo", mooMultiplier = mooNumber }));

希望我能帮上忙。

噢,哇。原来表单在我的主页上,所以我没有使用“Moo”作为操作方法,而是需要在“Homepage”操作方法上添加[HttpPost]注释。没有意识到提交到页面的表单是从中呈现的-这是解决此问题的一条非常有用的信息

谢谢大家的帮助

如果我理解正确的话

可以使用表单集合从textbox获取值

确保输入标记同时具有提到的id和name属性,否则它在表单集合中不可用

    [HttpPost]
    public ActionResult Moo(int mooNumber, **formcollection fc**)
    {
        **string textBoxVal= fc.getvalue("mooNumber").AttemptedValue;**
        Console.WriteLine(mooNumber);
        return RedirectToAction("ExtendedMoo", new { mooMultiplier = mooNumber });           
    }

你误解了这个问题。我了解路线,路线很好,我已经测试过了。它起作用了。问题不是路由,而是如何从表单中获取值。路由实际上是这样的:routes.MapRoute(“ExtendedMooCount”,//路由名称“Moo{mooMultiplier}”,//带有参数new{controller=“Web”,action=“ExtendedMoo”},//参数默认值new{mooMultiplier=@“\d+”}//RegEx约束:仅数字);好吧,我的错,那就试试吧。看起来很相似,事情是,我已经有了,正如你在我的原始帖子中看到的,作为我的“Moo”动作方法(中间代码块)的一部分。然而,当表单提交时,我的代码似乎从未到达该方法,这让我相信这不是正确的,或者我遗漏了一些东西。请跟随。我已经测试过了,它正在工作。我在文本框中键入的任何内容都会作为参数返回到我的actionNow中,我完全不知所措--这正是我所拥有的>>仍然不起作用。拉米…:(看起来很有帮助,但在我看来,发送重定向的“Moo”方法甚至还没有到达在方法中,这样我就可以知道它是否被访问,并且它没有打印出来。我只能从中推断,问题出在我的表单声明中——我的原始帖子中的第一块代码中。查看你的代码应该是这样的:你向控制台提交Moo方法。Moo方法。WriteLine然后调用“return Redirect”(Url.RouteUrl…)。它应该按预期工作。如果您的提交未到达Moo方法,可能您在global.asax中遇到路由规则问题?但是表单提交按钮是否至少应该到达Moo方法,因为我正告诉它将Post请求发送到该方法?这不应该与路由有任何关系,至少目前还没有要点。表单应该调用Moo方法,因为这是您告诉它如何使用@using(Html.BeginForm(“Moo”,“Web”))的。如果此调用没有到达该方法,我猜是路由规则的问题。另一种尝试是将“public ActionResult Moo(int mooNumber)”更改为“public ActionResult Moo(string mooNumber)”“尝试将int更改为字符串,但也没有成功。:/您能解释一下为什么路由规则会影响表单的发布吗?据我所知,路由规则甚至不应该生效,至少在我发布后重定向时才会生效。”。
return Redirect(Url.RouteUrl(new { controller = "Web", action = "ExtendedMoo", mooMultiplier = mooNumber }));
    [HttpPost]
    public ActionResult Moo(int mooNumber, **formcollection fc**)
    {
        **string textBoxVal= fc.getvalue("mooNumber").AttemptedValue;**
        Console.WriteLine(mooNumber);
        return RedirectToAction("ExtendedMoo", new { mooMultiplier = mooNumber });           
    }