Как передать весь текст ввода выбранной строки в действие? - PullRequest
2 голосов
/ 19 июня 2019

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

Я хочу получить текст ввода в каждой выбранной строке.

Как передать весь текст выбранной строки ввода в действие

<table width="100%" class="table table-striped table-bordered table-hover" id="dataTables-example">
    <thead>
        <tr>
            <th width="45%">Select</th>
            <th width="45%">User Name</th>
            <th width="5%">Description</th>
        </tr>
    </thead>
    <tbody>
        @foreach (var item in Model.TypeList)
        {
            <tr>
                <td>
                    <input type="checkbox" name=checklist" id="checklist"/>
                </td>
                <td>
                    @Html.DisplayFor(modelItem => item.UserName)
                </td>
                <td>
                    <input type="text" name="Extradecription"/>
                </td>
            </tr>
        }
    </tbody>

мои действия.Как я могу иметь соответствующие значения текста и флажок для выбранных строк

    public IActionResult Index()
    {
        return View(repository.GetUser());
    }


    public IActionResult Save(int[] checklist,string[] Extradecription)
    {
        repository.Save(checklist,Extradecription);
        return View(repository.GetUser());
    }

1 Ответ

1 голос
/ 19 июня 2019

Если вы попытаетесь получить два разных массива, как показано в коде действия контроллера, возникнет проблема с текстом для невыбранных элементов, массив для флажков будет привязан, как и ожидалось, но для описаний будет другим, просто чтобы быть понятным, проверьте следующий пример:

Предполагается, что у нас есть список с опциями дерева:

  • 100 - Foo
  • 200 - Бар
  • 300 - Zaz

Если мы установим следующий выбор для элементов:

  • Фу,
  • Заз, с

Если мы посмотрим на запрос, это необработанный запрос:

checklist = 100,300
Extradecription = a,null,c

Итак, проблема состоит в том, чтобы избежать привязки нулевых описаний для невыбранных опций, это сложно, в этом случае я рекомендую вам четкое решение:

  1. Создание модели для создания процесса сущности
  2. Создать модель для опции
  3. Добавление списка опционной модели в модель создания сущности
  4. Инициализация модели для создания новой сущности
  5. Отображение входных данных с использованием тега asp-for
  6. Получить запрос на создание нового объекта

Я приму название моделей и свойств, чтобы показать, как связать типизированный массив в вашем запросе, изменить имена в соответствии с вашим сценарием.

Создать модель сущности:

public class CreateEntity
{
    public CreateEntity()
    {
        Items = new List<SelectedItem>();
    }

    // Step 3
    [BindProperty]
    public List<SelectedItem> Items { get; set; }

    // Another properties
}

Модель для варианта:

public class SelectedItem
{
    public bool IsSelected { get; set; }

    public int Code { get; set; }

    public string Name { get; set; }

    public string Desc { get; set; }
}

Отображение списка опций:

@for (var i = 0; i < Model.Items.Count; i++)
{
    <input asp-for="@Model.Items[i].IsSelected" />@Model.Items[i].Name
    <input asp-for="@Model.Items[i].Desc" />
    <br/>
}

Действия GET и POST в контроллере:

[HttpGet]
public IActionResult CreateOption()
{
    // Set the items list
    var model = new CreateEntity
    {
        Items = new List<SelectedItem>
        {
            new SelectedItem{ Code = 100, Name = "Foo" },
            new SelectedItem{ Code = 200, Name = "Bar" },
            new SelectedItem{ Code = 300, Name = "Zaz" }
        }
    };

    return View(model);
}

[HttpPost]
public IActionResult CreateOption(CreateEntity form)
{
    // Retrieve only selected items
    var query = form.Items.Where(item => item.IsSelected == true).ToList();

    return View();
}

Если вы хотите узнать больше о флажках на страницах Razor, проверьте эту ссылку: Флажки в форме страниц Razor

Пожалуйста, дайте мне знать, если этот ответ полезен.

...