0

我正在尝试使用只有一个文本字段的简单表单来获取一些信息,这些信息将在操作方法中用于重定向到不同的操作方法。这是上下文:

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

@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!" />
}

表单中提交的数字应该发送到“Web”控制器(WebController.cs)中的动作方法“Moo”:

 [HttpPost]
        public ActionResult Moo(int mooNumber)
        {
            Console.WriteLine(mooNumber);
            return RedirectToAction("ExtendedMoo", new { mooMultiplier = mooNumber });           
        }

最后,“Moo”动作方法应该让我回到原来的“www.cows.com/Moo8”页面;正如你在上面看到的,我只是使用了一个已经存在的动作方法“ExtendedMoo”:

 public ViewResult ExtendedMoo(int mooMultiplier)
        {
            ViewBag.MooMultiplier = RouteData.Values["mooMultiplier"];

            return View();
        }

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

4

4 回答 4

0

而不是RedirectToAction,使用Redirect并创建 Url。这应该可以解决问题:

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

我希望我有帮助。

于 2012-02-03T05:54:09.667 回答
0

参考这篇文章这篇文章,您可能会了解路由的工作原理。有什么问题"www.cows.com/Moo8",试着找出来。暗示"{controller}/{action}/{parameter_or_id}"

于 2012-02-03T05:31:53.333 回答
0

哇哦。原来该表单在我的主页上,因此我需要使用 [HttpPost] 注释覆盖“主页”操作方法,而不是使用“Moo”作为操作方法。没有意识到表单提交到它们被渲染的页面 - 这是解决这个问题的一条非常有用的信息!

感谢大家的帮助!

于 2012-02-03T07:55:22.900 回答
0

如果我理解正确

您可以使用表单集合从文本框中获取值。

确保输入标签同时提到了 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 });           
    }
于 2014-03-14T23:41:50.740 回答