我是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}");
}
它没有模型。我尝试使用模型时,它不起作用!
答案 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}");
}