如何将数据从视图传递到控制器

时间:2014-06-02 21:52:53

标签: asp.net-mvc asp.net-mvc-5

我是asp.net MVC5的新手,我试图将数据从视图传递给控制器​​作为字符串。 这是控制器类:

namespace Movies.Controllers
{
    public class HelloWorldController : Controller
    {
        // GET: HelloWorld

        public ActionResult Index()
        {
            return View();
        }
        [HttpPost]
        public ActionResult welcome(FormCollection fc, string reportName)
        {
            ViewBag.Message = reportName;
            return View();
        }
    }
}

这是索引视图:

@{
    ViewBag.Title = "MVC Movies";
}
<h2>My Movies List</h2>

<p>Hellow from our view template</p>
@using (Html.BeginForm("Welcome", "HelloWorld", FormMethod.Get))
{

    <p>
        <input type="text" name="reportName" />
        <input type="submit" />

    </p>
}

欢迎观点:

@{
     Layout = "~/Views/Shared/_Layout.cshtml";
}
<h2>welcome</h2>
@{
    ViewBag.Title = "Welcome";
}
<ul>
    @for (int i = 0; i < 2; i++)
    {
        <li>@ViewBag.Message</li>
    }
</ul>

实际上我的Index方法是传递一个视图,该视图将在表单中包含字符串的文本框,然后单击提交按钮应用程序应该在同一个控制器的Welcome方法中传递该字符串。点击提交按钮后,浏览器会显示一个找不到资源的窗口。

问题是什么?谢谢你的时间.. :)

3 个答案:

答案 0 :(得分:2)

1)操作名称区分大小写,您在表单定义中使用“欢迎”,但操作必须使用 w 小写的名称“welcome”。

2)您的表单正在进行GET,但您正在操作

中进行POST
    [HttpGet]
    public ActionResult welcome(FormCollection fc, string reportName)
    {
        ViewBag.Message = reportName;
        return View();
    }

答案 1 :(得分:1)

FormMethod.Get替换为您的beginform中的FormMethod.Post

答案 2 :(得分:1)

将FormMethod.Get修改为FormMethod.Post:

@using (Html.BeginForm("Welcome", "HelloWorld", FormMethod.Post))
{

    <p>
        <input type="text" name="reportName" />
        <input type="submit" />

    </p>
}

将您的操作实施更改为:

    [HttpPost]
    public ActionResult welcome(FormCollection fc)
    {
        ViewBag.Message = fc["reportName"];
        return View();
    }

但是,我强烈建议您为表单创建一个视图模型,并使用它而不是FormCollection。