我是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方法中传递该字符串。点击提交按钮后,浏览器会显示一个找不到资源的窗口。
问题是什么?谢谢你的时间.. :)
答案 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。