Как опубликовать все выбранные элементы в списке с множественным выбором, чтобы он был включен в мою модель представления? - PullRequest
0 голосов
/ 17 января 2019

У меня есть веб-сайт ASP.Net Core 2.1 MVC, над которым я работаю.

В одном из моих представлений я настроил два списка с множественным выбором, чтобы позволить клиенту назначать пользователей сайту, предоставляя список всех неназначенных пользователей в левом списке и список назначенных пользователей направый список, используя пример Esua Silva для html / javascript / scss.Это работает просто отлично.

Для обратной записи я понял, что мне нужно выбрать все элементы в новом списке «Назначенные пользователи» при отправке, поэтому я использую JavaScript для настройки всех параметров в «Списке назначенных пользователей» наЗначение true, когда пользователь нажимает кнопку обновления (отправки).

Однако я не получаю список пользователей в моей модели, поэтому я могу работать с ними в контроллере при обратной записи. Список назначенных пользователей вмодель всегда имеет счетчик 0, когда она передается в метод POST контроллера.

Вот мой список HTML с несколькими вариантами выбора в представлении.

<!-- User Assignment Tab -->
<div role="tabpanel" class="tab-pane" id="assignUsersTab" aria-labelledby="assign-users-tab">

    <div class="card-body ml3 mr3">

        <div class="row">


            <div class="col-5">
                <label>Users Assigned to Site</label>
                <select multiple="multiple" id="lstBox1" name="AssignedUserList" size="10"  asp-items="@(new SelectList(Model.AssignedUserList, "UserId", "Name"))" class="form-control">
                </select>
            </div>

            <div class="col-2 text-center subject-info-arrows pt-5">
                <input type="button" id="btnAllRight" value=">>" class="btn btn-default"/><br/>
                <input type="button" id="btnRight" value=">" class="btn btn-default"/><br/>
                <input type="button" id="btnLeft" value="<" class="btn btn-default"/><br/>
                <input type="button" id="btnAllLeft" value="<<" class="btn btn-default"/>
            </div>

            <div class="col-5">
                <label>Unassigned Company Users</label>
                <select multiple="multiple" id="lstBox2" size="10" name="UnassignedUserList" asp-items="@(new SelectList(Model.UnassignedUserList, "UserId", "Name"))" class="form-control"></select>
            </div>
            <div class="clearfix"></div>

        </div>


    </div>

</div>

Вот моя модель представления.

public class EditSiteViewModel
{
    public int Id { get; set; }

    [Required]
    [StringLength(50, ErrorMessage = "The {0} must be at least {2} and at max {1} characters long.", MinimumLength = 2)]
    [Display(Name = "Site Name")]
    public string SiteName { get; set; }

    [Required]
    [Display(Name = "Company ID")]
    public int CompanyId { get; set; }

    [Display(Name = "Company Name")]
    public string CompanyName { get; set; }

    [Display(Name = "App ID")]
    public string AppId { get; set; }

    [Display(Name = "App Key")]
    public string AppKey { get; set; }

    [Display(Name = "Admin Site")]
    public bool IsAdminSite { get; set; }

    [Display(Name = "Enabled")]
    public bool IsEnabled { get; set; }

    public string ReturnUrl { get; set; }

    public List<Company> CompanyList { get; set; }

    public List<UserSiteItem> UnassignedUserList { get; set; }

    public List<UserSiteItem> AssignedUserList { get; set; }

    public List<ApplicationUser> CompanyUsersList { get; set; }

}

Вот мой jquery для операции SelectAll, когда пользователь нажимает кнопку Обновить

$('#site-form').on("submit", selectAll);

function selectAll() {
    $("#lstBox1").find("option").each(function() {
        $(this).attr('selected', true);
    });
    console.log(`SelectAll processed`);
}

Я вижу, что console.log получает удар, когда я F12 в Chrome.

Вот моя подпись метода редактирования POST в моем контроллере.

[HttpPost]
public async Task<IActionResult> Edit(EditSiteViewModel editSite, string cancel)

Когда я проверяю свойства EditSiteViewModel после отправки, я вижу, что свойство AssignedUserList имеет счетчик0. Я вижу другие свойства в моей модели представления, поэтому я знаю, что материал публикации формы работает, но не для списка с множественным выбором.

Я предполагаю, что проблема связана с тем, как я пытаюсь связатьсписок множественного выбора со свойством viewmodel.Я видел ТАК сообщения, которые говорят, что я должен поставить [] после текста в имени.(т.е. name = "AssignedUserList []" в

Я потратил много часов на поиски решения без удачи. Любая помощь будет принята с благодарностью.

1 Ответ

0 голосов
/ 17 января 2019

Отправленное значение выбора всегда будет примитивным типом (string, int и т. Д.). Соответственно, объявленное значение множественного выбора будет просто перечисляемым примитивным типом. Таким образом, вы не можете напрямую связываться с чем-то вроде List<UserSiteItem>. Вместо этого вам нужно привязать к свойству типа List<string> или List<int> (в зависимости от того, настроили ли вы пользовательский PK пользователя идентификатора), поскольку в этом случае это будет список идентификаторов пользователей, отправляемых обратно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...