例如,我有ViewComponent BookShelf,其主要思想是将书籍添加到书架。组件文件:
(〜/查看/共享/组件/书架/ Default.cshtml)
<form id="addForm" asp-controller="?" asp-action="?" role="form" method="post">
<input type="text" name="bookName" value="exampleValue"/ >
<button type="submit"> Add book </button>
</form>
(〜/ ViewComponents / BookShelfViewComponent.cs)
public class BookShelfViewComponent : ViewComponent
{
private readonly ApplicationDbContext _dbContext;
public RoleManagementViewComponent(
ApplicationDbContext context)
{
_dbContext = context;
}
public IViewComponentResult Invoke()
{
return View();
}
public IViewComponentResult AddBook(string bookName)
{
//Some database logic to add book
}
}
那么,主要的问题是如何在这个ViewComponent中将书名传递给AddBook方法? asp-controller 和 asp-action 属性应该是什么?也许我不应该返回IViewComponentResult,如果我想在添加书后重新加载ViewComponent?
答案 0 :(得分:1)
我不确定你是否还需要答案,但我不妨提一下ViewComponents不处理HTTP请求。 ViewComponents帮助处理渲染方面的事情。您将需要使用Controller来处理POST,例如“添加书籍”。
以下是涉及视图和控制器的POST的一个非常原始的示例:
查看
<form asp-controller="Items" asp-action="Create">
<input type="text" name="item" value="exampleValue" />
<input type="submit" value="Create" class="btn btn-default" />
</form>
ItemsController(命名约定重要)
// POST: Items/Create
[HttpPost]
public IActionResult Create(string item)
{
//do you string db thing
}