Показать <select>значений в PartialView ASP.NET Core - PullRequest
0 голосов
/ 21 декабря 2018

Я перенесу проект из ASP.NET MVC в ASP.NET Core

У меня было Частичное представление с двумя daropdowns

Таким образом, метод контроллера был таким

 public ActionResult AddPeopleToProposal()
    {
        ViewBag.Worker = new SelectList(db.People, "Id", "FIO").ToList();
        ViewBag.Proposal = new SelectList(db.Proposals, "Id", "Id").ToList();
        return PartialView("AddPeopleToProposal");
    }

И в представлении я сделал это так:

<div class="modal fade" id="addPeopleToProposal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLongTitle">Добавить работника на заявку</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>
        <div class="modal-body">
            @Html.Action("AddPeopleToProposal", "Manage")
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
            <button type="button" id="peopleToProposalCreate" class="btn btn-primary">Создать</button>
        </div>
    </div>
</div>

И частичное представление

<form>
<div class="form-group">
    <label for="recipient-name" class="col-form-label">Працівник</label>
    @Html.DropDownList("Worker", null, "XXXX", htmlAttributes: new { @class = "form-control", @id = "peopleIdAdd" })
</div>
<div class="form-group">
    <label for="recipient-name" class="col-form-label">Оберіть заявку</label>
    @Html.DropDownList("Proposal", null, "XXXX", htmlAttributes: new { @class = "form-control", @id = "proposalIdAdd" })
</div>
<div class="form-group">
    <label for="message-text" class="col-form-label">Коментар</label>
    <input type="text" class="form-control" id="commentVchasno" >
</div>

Но, как я знаю, @Html.Action был ограничен

Я понимаю это в Core вот так

Контроллер

public ActionResult AddPeopleToProposal()
    {
        ViewData["Worker"] = new SelectList(_context.People, "Id", "FIO");
        ViewData["Proposal"] = new SelectList(_context.Proposals, "Id", "Id");
        return PartialView("Partials/AddPeopleToProposal");
    }

И частичный вид

<form>
    <div class="form-group">
        <label  class="col-form-label">Працівник</label>
        <select class="form-control" asp-items="ViewBag.Worker"></select>
    </div>
    <div class="form-group">
        <label  class="col-form-label">Оберіть заявку</label>
        <select  class="form-control" asp-items="ViewBag.Proposal"></select>
    </div>
    <div class="form-group">
        <label  class="col-form-label">Коментар</label>
        <input type="text" class="form-control" id="commentVchasno" >
    </div>

</form>

И вид с того места, где я звоню Частичный

<div class="modal fade" id="addPeopleToProposal" tabindex="-1" role="dialog" aria-labelledby="exampleModalCenterTitle" aria-hidden="true">
<div class="modal-dialog modal-dialog-centered" role="document">
    <div class="modal-content">
        <div class="modal-header">
            <h5 class="modal-title" id="exampleModalLongTitle">Добавить работника на заявку</h5>
            <button type="button" class="close" data-dismiss="modal" aria-label="Close">
                <span aria-hidden="true">&times;</span>
            </button>
        </div>
        <div class="modal-body">
            @Html.Partial("Partials/AddPeopleToProposal")
        </div>
        <div class="modal-footer">
            <button type="button" class="btn btn-secondary" data-dismiss="modal">Отмена</button>
            <button type="button" id="peopleToProposalCreate" class="btn btn-primary">Создать</button>
        </div>
    </div>
</div>

Но в Core у меня нет значений в выборках.Где моя проблема?

1 Ответ

0 голосов
/ 24 декабря 2018

Если вы хотите инициализировать страницу непосредственно при получении частичного просмотра, попробуйте вставить следующие две строки кода в запрос get основного вида частичного просмотра. Подробнее о частичных представлениях

ViewData["Worker"] = new SelectList(_context.People, "Id", "FIO");
ViewData["Proposal"] = new SelectList(_context.Proposals, "Id", "Id");

Или вы можете использовать ViewComponent вместо частичного просмотра, чтобы получить данные заполнения выпадающих списков из метода Invoke впросмотреть класс компонента.Попробуйте код, как показано ниже

ViewComponent.cs

 public class AddPeopleToCountryViewComponent:ViewComponent
{
    private readonly MVCDbContext _context;

    public AddPeopleToCountryViewComponent(MVCDbContext context)
    {
        _context = context;
    }

    public async Task<IViewComponentResult> InvokeAsync(
    int maxPriority, bool isDone)
    {
        ViewData["Customer"] = new SelectList(_context.Customer, "Id", "Name");
        ViewData["Country"] = new SelectList(_context.Country, "Id", "Id");
        return View();
    }
}

Default.cshtml ViewComponent

<form>
<div class="form-group">
    <label class="col-form-label">People</label>
    <select class="form-control" asp-items="@ViewBag.Customer"></select>
</div>
<div class="form-group">
    <label class="col-form-label">Country</label>
    <select class="form-control" asp-items="@ViewBag.Country"></select>
</div>
<div class="form-group">
    <label class="col-form-label">Comment</label>
    <input type="text" class="form-control" id="commentVchasno">
</div>

вместо PartialView вмодальный вид основного вида

<div class="modal-body">
     @await Component.InvokeAsync("AddPeopleToCountry", new {  })
 </div>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...