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}"); } |
它在没有模型的情况下工作。我一试模特,就不管用了!
您还可以使用
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}"); } |
使用
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> |
虽然不起作用,但加上
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}"); } |