我从ASP.net MVC开始,我有两种看法。 第一个是ViewPost,带有一个表单,我希望当按下输入按钮时,它将信息从表单发送到另一个视图。我的代码是这样的:
<h2>ViewPost</h2>
<form method="POST" action="~/Home/NewView">
Number<input id="id_number"type="text" name="name_number" />
Text<input id="id_text" type="text" name="name_text" />
<input type="submit"/>
</form>
在控制器中,我有以下代码:
[HttpPost]
public ActionResult ViewPost(int? name_number, string name_text)
{
return View();
}
在控制器中,我还有一个用于NewView的GET方法,该方法将检查值并将其连接起来,并在ViewBag.Message中显示结果字符串:
public ActionResult NewView(int? number, String name)
{
String urlParam = "";
if (number.HasValue)
{
urlParam += " Value number=" + number;
}
if (name != null)
{
urlParam += " Value name=" + name;
}
if (urlParam == "")
{
urlParam = "No values";
}
ViewBag.Message = urlParam;
return View();
}
当我按下“提交”按钮时,
Resource not found. Requested URL: /Home/NewView
但是当编写URL时,我可以毫无问题地
答案 0 :(得分:1)
您的表单正在发送POST
请求:
method="POST"
但是您声称希望收到GET
请求:
在控制器中,我有一个用于NewView的GET方法
将表单更改为GET
请求:
method="GET"
或将控制器操作更改为接受POST
:
[HttpPost]
public ActionResult NewView(int? number, String name)
{
//...
}
此外,表单元素名称必须与您希望它们填充的变量相同。因此,可以将它们更改为以下形式:
name="number"
...
name="name"
或通过操作方法进行更改:
public ActionResult NewView(int? name_number, String name_text)
有关术语的注释,可能会为您清除其中的一些内容...
我希望在按下输入按钮时将信息从表单发送到另一个视图
这是不正确的。您不会将值发送到视图,而是将其发送到控制器操作。通常,发送到服务器的所有内容都将执行控制器操作。该action方法可以使用这些值做任何事情,包括返回视图。
但是总体的交互作用是浏览器内的代码(链接,表单,JavaScript和AJAX等)向服务器端操作发出请求,并且这些操作返回各种响应。