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-controller 和 asp-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
}
比如我有一个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-controller 和 asp-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
}