ViewComponent与他的Controller之间的交互

时间:2016-03-01 11:05:32

标签: c# asp.net-core asp.net-core-viewcomponent

例如,我有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?

1 个答案:

答案 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
    }