ViewComponent 和他的 Controller 之间的交互

Interaction between ViewComponent and his Controller

比如我有一个ViewComponent BookShelf,它的主要思想是把书放到书架上。组件文件:

(~/Views/Shared/Components/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-controllerasp-action 属性应该是什么?也许我不应该 return IViewComponentResult,如果我想在添加书后重新加载 ViewComponent?

我不确定您是否还需要一个答案,但我不妨提一下 ViewComponents 不处理 HTTP 请求。 ViewComponents 有助于处理渲染方面的事情。您需要使用控制器来处理 POST,例如 "adding a book"。

这是一个涉及视图和控制器的 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
    }