关于c#:从html表单传递数据>

Passing data from html form > Model > Controller not working

我对ASP.NET核心是全新的(2周后),我需要再次学习Web开发和ASP.NET的工作,是的,尝试解决所有问题。所以请原谅这个可能毫无意义的问题。

我在将数据从HTML表单传递到模型,然后再传递到控制器时遇到了一些问题,我想不出来。这是我的问题。

以下是基本的HTML:

1
2
3
4
<form method="post" action="/FormProcWithModels" role="form">
    <input asp-for="UserName" type="text" id="UserName" placeholder="Enter your Full Name" />
    <input type="submit" />
</form>

以下是模型:

1
2
3
4
5
6
7
namespace project001.Models
{
    public class ContactPageModel
    {
        public string UserName{ get; set; }
    }
}

这里是控制器:

编辑以显示更多代码。这是我的获取方法

1
2
3
4
5
6
7
8
9
10
11
12
[HttpGet]
public IActionResult Contact()
{
   ViewBag.PageTitle ="This is the Contact page";
   return View();
}

[HttpPost("FormProcWithModels")]
public IActionResult Contact(ContactPageModel model)
{
    return Content($"The form username entered is {model.UserName}");
}

例如,当我在表单中输入"jim"的名称并提交它时,页面会加载"输入的表单用户名是:",但名称不会传递。

我没有得到错误或任何东西,而且我还不足以弄清楚为什么数据为空。

提前感谢您提供的任何帮助。

编辑:

当我这样做的时候:

1
2
3
4
5
6
7
8
[HttpPost("FormProcWithoutModels")]
public IActionResult Contact(string uName)
{
    string currentUser = uName;
    ViewBag.PageTitle ="This is the Contact page";
    //return View();
    return Content($"The form username entered is {currentUser}");
}

它在没有模型的情况下工作。我一试模特,就不管用了!


您还可以使用HttpContext.Request参数获取提交的值。

1
2
3
4
5
6
7
[HttpPost("FormProcWithModels")]
public IActionResult Contact()
{
    var UserName = HttpContext.Request.Form["UserName"]

    return Content($"The form username entered is {UserName}");
}

使用FormCollection

1
2
3
4
5
6
7
[HttpPost("FormProcWithModels")]
public IActionResult Contact(FormCollection Fc)
{
    var UserName = Fc["UserName"].ToString();

    return Content($"The form username entered is {UserName}");
}


我想这是因为,你没有get方法。您需要添加get方法来获取用户输入。

所以,基本上你的控制器看起来是:

1
2
3
4
5
6
7
8
9
10
11
[HttpGet]
public IActionResult Contact()
{
    return View();
}

[HttpPost("FormProcWithModels")]
public IActionResult Contact(ContactPageModel model)
{
    return Content($"The form username entered is {model.UserName}");
}

查看页面:

1
2
3
4
5
6
@model ContactPageModel

<form method="post" action="/FormProcWithModels">
    <input asp-for="UserName" type="text" id="UserName" placeholder="Enter your Full Name" />
    <input type="submit" />
</form>

虽然不起作用,但加上role="form"

1
2
3
4
5
<form method="post"...  role="form">

...
...
</form>


我发现在ASP.NET核心中,模型绑定并不总是自动的。尝试:

1
2
3
4
5
[HttpPost("FormProcWithModels")]
public IActionResult Contact([FromForm] ContactPageModel model)
{
    return Content($"The form username entered is {model.UserName}");
}