نحوهی استفاده از ViewComponent درون Controller
نویسنده: سیروان عفیفی
تاریخ: ۱۳۹۸/۰۵/۲۷ ۱۵:۱۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public class UserListViewComponent : ViewComponent
{
private readonly UserRepository repository;
public UserListViewComponent(UserRepository repository)
{
this.repository = repository;
}
public IViewComponentResult Invoke()
{
var users = repository.GetUsers().Take(10).ToList();
return View(model: users);
}
} @model IList<User>
@foreach (var user in Model)
{
<li>
<a asp-controller="UserManager" asp-action="Edit" asp-route-id="@user.Id">@user.Name</a>
</li>
}
<a class="btn btn-info" asp-controller="UserManager" asp-action="Index">More...</a> public class UserManagerController : Controller
{
private readonly UserRepository repository;
public UserManagerController(UserRepository repository)
{
this.repository = repository;
}
public ViewResult Index()
{
var users = repository.GetUsers().ToList();
return View(users);
}
public ViewResult Edit(int id)
{
var user = repository.GetUsers().FirstOrDefault(u => u.Id == id);
return View(user);
}
[HttpPost]
public IActionResult Edit(User user)
{
repository.Edit(user);
return RedirectToAction("Index", "Home");
}
} // Views/UserManager/Edit.cshtml
@model User
<div class="row">
<div class="col-md-8">
<form method="post">
<input type="hidden" asp-for="Id" />
<div class="form-group">
<label asp-for="Name"></label>
<input asp-for="Name" class="form-control"/>
</div>
<div class="form-group">
<label asp-for="LastName"></label>
<input asp-for="LastName" class="form-control"/>
</div>
<div class="form-group">
<label asp-for="Age"></label>
<input asp-for="Age" class="form-control"/>
</div>
<button type="submit" class="btn btn-primary">Save</button>
</form>
</div>
</div>
// Views/UserManager/Index.cshtml
@model IList<User>
<table class="table">
<tr>
<td>Id</td>
<td>Name</td>
<td>LastName</td>
<td>Age</td>
</tr>
@foreach (var user in Model)
{
<tr>
<td>@user.Id</td>
<td>@user.Name</td>
<td>@user.LastName</td>
<td>@user.Age</td>
</tr>
}
</table> [ViewComponent(Name = "UserList")]
public class UserManagerController : Controller
{
private readonly UserRepository repository;
public UserManagerController(UserRepository repository)
{
this.repository = repository;
}
public ViewResult Index()
{
var users = repository.GetUsers().ToList();
return View(users);
}
public ViewResult Edit(int id)
{
var user = repository.GetUsers().FirstOrDefault(u => u.Id == id);
return View(user);
}
[HttpPost]
public IActionResult Edit(User user)
{
repository.Edit(user);
return RedirectToAction("Index", "Home");
}
public IViewComponentResult Invoke()
{
var users = repository.GetUsers().Take(10).ToList();
return new ViewViewComponentResult
{
ViewData = new ViewDataDictionary<IList<User>>(ViewData, users)
};
}
} UserManagerController: /Views/UserManager/Edit.cshtml /Views/UserManager/Index.cshtml UserListViewComponent: /Views/Shared/Components/UserList/Default.cshtml