从带有帖子的视图中发送值,然后在另一个视图中获取它们

时间:2019-04-12 14:11:37

标签: c# asp.net-mvc

我从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时,我可以毫无问题地

1 个答案:

答案 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等)向服务器端操作发出请求,并且这些操作返回各种响应。