顾名思义,将数据发布到数据库并不是问题。问题是一旦发布数据,网页本身会发生什么。基本上,我希望用户在提交表单后留在页面上。在添加了有关公司的详细信息之后,用户单击提交,得到一条消息,提示“添加成功”,表单将清除,然后可以进行其他提交了。
取而代之的是,数据被发送,但随后出现错误:
InvalidOperationException:找不到视图'AddCompany'。搜索了以下位置:
/Views/AddCompany/AddCompany.cshtml
/Views/Shared/AddCompany.cshtml
为了节省空间,我不会在每一节中显示所有代码,但希望您能理解。
型号代码:
protected override void OnModelCreating(ModelBuilder modelBuilder)
{
modelBuilder.Entity<CommunicationDetails>(entity =>
{
entity.HasKey(e => e.FirstContactDate)
.HasName("PRIMARY");
entity.Property(e => e.FirstContactDate).HasColumnType("date");
entity.Property(e => e.CompanyName)
.IsRequired()
.HasColumnType("varchar(50)")
.HasCharSet("latin1")
.HasCollation("latin1_swedish_ci");
entity.Property(e => e.FirstContactMethod)
.IsRequired()
.HasColumnType("varchar(20)")
.HasCharSet("latin1")
.HasCollation("latin1_swedish_ci");
... 等等。
控制器代码:
namespace dotnetproject2.Controllers
{
public class AddCompanyController : Controller
{
public IActionResult AddCompany()
{
return View();
}
[HttpPost]
public IActionResult AddCompany (CompanyDetails company) {
if (ModelState.IsValid)
{
using (AddCompanyContext db = new AddCompanyContext())
{
db.CompanyDetails.Add(company);
db.SaveChanges();
}
ModelState.Clear();
ViewBag.Message = company.companyName + " has been added.";
}
return View();
}
}
查看代码:
<form id="company-form" asp-controller="AddCompany" asp-action="AddCompany" method="post">
<div class="form-group">
<label class="col-sm-4" for="companyName">Company Name</label>
<input type="text" asp-for="companyName" id="companyName" class="form-control-sm col-sm-6">
</div>
<div class="form-group">
<label class="col-sm-4" for="publicEmail">Public Email</label>
<input type="text" asp-for="publicEmail" id="publicEmail" class="form-control-sm col-sm-6">
</div>
<div class="form-group">
<label class="col-sm-4" for="contactPersonOne">Contact Person 1</label>
<input type="text" asp-for="contactPersonOne" id="contactPersonOne" class="form-control-sm col-sm-6">
</div>
抱歉,如果这篇文章太长了。不确定要包含多少代码。请也忽略怪异的缩进;在我的IDE中一切正常。
另外,我使用的是VS Code,因此很有可能基于Visual Studio的解决方案无法解决我的问题。例如,对于我来说,使用控制器来支撑视图似乎不是一种选择。
最佳答案
不确定从技术上讲这是否应该是评论,但我解决了问题。
我仍然不知道上面的代码在哪里出了问题,但是更大的问题是我的方法。从一开始我应该做的只是遵循Microsoft文档中的教程:https://docs.microsoft.com/en-us/aspnet/core/tutorials/first-mvc-app/adding-model?view=aspnetcore-3.1&tabs=visual-studio
我不知道可以用一些简单的命令为模型/视图/控制器搭建CRUD代码。我认为类似的脚手架仅适用于Visual Studio,因为当我右键单击类似YouTube教程中的内容时,我无法使用VS Code使用脚手架选项。现在,我知道可以通过CLI进行相同的操作。
因此,总的来说:不要随便去寻找您想做的每件事的教程。只需按照Microsoft文档中的教程来处理项目的大部分内容(如CRUD)即可。只需记住在安装软件包时会告诉您.Net Core版本即可。
关于mysql - .Net Core MVC表单提交到数据库,但 View 抛出错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59153267/