我对ASP.NET核心是全新的(2周后),我需要再次学习Web开发和ASP.NET的工作,是的,尝试解决所有问题。所以请原谅这个可能毫无意义的问题。
我在将数据从HTML表单传递到模型,然后再传递到控制器时遇到了一些问题,我想不出来。这是我的问题。
以下是基本的HTML:
以下是模型:
namespace project001.Models
{
public class ContactPageModel
{
public string UserName{ get; set; }
}
}
这里是控制器:
编辑以显示更多代码。这是我的获取方法
[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}");
}
它在没有模型的情况下工作。我一试模特,就不管用了!
如果这只是一个基本的学习项目,可以考虑将其上传到GitHub,让其他人查看。问题中没有足够的信息来解决这个问题。
它不可能与名为string uName的参数一起使用,因为输入的名称是name="UserName",因此您没有显示相关的代码。
嗨,@stephenmuecke,这是另一条路线。我把它放在这里是为了展示当我这样做数据传递时,它是如何工作的。请注意"FormProcWithOutModels"与"FormProcWithModel"。对不起,如果我把它弄混了
您显示的代码工作正常。如果它对您不起作用,那么它应该归功于您没有显示给我们的其他代码。
我很好奇,当你说你对ASP.NET核心是全新的,并且必须全面学习Web开发时,你以前用过什么?我对ASP.NET核心的学习曲线很感兴趣,使人们能够更容易地使用.NET核心…
我的经验是在php/js中,我的经验是在mean/nodes堆栈中,所以大多数这些东西在asp.net中不一定是压倒性的(到目前为止,lol),但是,对我来说,学习曲线有点陡峭,因为有太多的东西,我没有人真正的帮助我。
谢谢@tonyranieri,这个项目是基本的,所以我不知道还有什么其他代码可以交互。我要把它分成一个新的解决方案,看看会发生什么。
您还可以使用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}");
}
你好@program宝藏。我做了第一个,但没做好事。对于第二个,我需要添加什么"使用"才能使它工作?
using Microsoft.AspNetCore.Http
我想这是因为,你没有get方法。您需要添加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
虽然不起作用,但加上role="form"。
...
...
我有一个"get方法",在我的代码中与您的方法完全相同。
@谢谢你告诉我,我更新了答案,请查查
@索姆多:我已经检查过了,你的代码真的有效。
我更新了我的帖子,包括了我的get方法和添加了role="form"的html。什么也没有。我看不到任何错误,当我在返回内容行上放置一个断点,并将鼠标移到"model"上时,该值为空。另外,为了清楚起见,这是在我的HTML表单Razor页面的顶部:@model project001.models.contactpagemodel and nothing。
@索姆多:不确定这就是为什么它不起作用,它对我起作用……见这里:imgr.es/3si4
哇!哈哈,我明白了…………我不知道该说什么,你的代码看起来和我的完全一样,但在我的断点上,我的代码是"空的"。我在文章的末尾添加了更多的代码,这样它就可以工作,但是当我这样做的时候。它不。可能是我遗漏了一个指令(@using)还是……其他什么?我迷路了,一个笨蛋都不知道还有其他的选择
@索姆多:没有,没有什么需要补充的。我真的不确定,那有什么问题呢!我用的是.NET Core SDK 2.0和vs2017,你用的是哪个版本?其他方法由@programbarriers声明,但不是复杂场景的最佳实践!!
我下载了两周前的版本,所以不管是哪一个,我都会继续寻找。谢谢你的帮助
我发现在ASP.NET核心中,模型绑定并不总是自动的。尝试:
[HttpPost("FormProcWithModels")]
public IActionResult Contact([FromForm] ContactPageModel model)
{
return Content($"The form username entered is {model.UserName}");
}