从html表单传递数据>型号>控制器不工作

时间:2017-12-16 13:45:26

标签: c# asp.net-core asp.net-core-mvc

我是ASP.NET Core的新手(2周后),我需要再次使用ASP.net学习Web开发工作,是的,试图全面了解。所以请原谅可能的noob问题。

我遇到的问题是将数据从HTML表单传递到Model,然后传递给Controller,这是我无法弄清楚的。这是我的问题。

这是基本的HTML:

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

这是模特:

namespace project001.Models
{
    public class ContactPageModel
    {
        public string UserName{ get; set; }
    }
}

这是控制器:

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

[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”的名称并提交它时,页面加载“输入的表单用户名是:”但名称不会通过。

我没有得到错误或任何事情,我不能很好地弄明白为什么 数据为空。

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

修改

当我这样做的时候:

[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}");
}

它没有模型。我尝试使用模型时,它不起作用!

3 个答案:

答案 0 :(得分:2)

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

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

[HttpGet]
public IActionResult Contact()
{
    return View();
}

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

查看页面:

@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"

<form method="post"...  role="form">

...
...
</form>

答案 1 :(得分:2)

您还可以使用HttpContext.Request参数

获取提交的值
[HttpPost("FormProcWithModels")]
public IActionResult Contact()
{
    var UserName = HttpContext.Request.Form["UserName"]

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

使用FormCollection

[HttpPost("FormProcWithModels")]
public IActionResult Contact(FormCollection Fc)
{
    var UserName = Fc["UserName"].ToString();

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

答案 2 :(得分:0)

我发现在ASP.Net Core中,模型绑定并不总是那么自动。尝试:

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