Можно ли использовать HTML Helpers в Javascript?

1

Я разрабатываю веб-приложение для компании, в которой я работаю. Пользователь может динамически создавать строки в таблице HTML, устанавливая количество часов, с которыми они хотят работать. Это было достигнуто с помощью Javascript.

Например, если пользователь введет число 5, в таблице появятся 5 строк.

Как использовать мою модель с динамическими компонентами?

Я попытался добавить это внутри скрипта:

@Html.EditorFor(model => model.Price, new { htmlAttributes = new { @class = "form-control", id = "priceInput", type = "number" } })

Вместо:

const priceInput = document.createElement('priceInput');

Проверьте полный сценарий ниже.

<script type="text/javascript">
        function changeRow() {
            const aTable = document.getElementById('hourPriceTable');
            const hourTextBox = document.getElementById('hourInput');
            const rowNumber = parseInt(hourTextBox.value);
            if (rowNumber) {
                const rows = [];

                for (let i = 1; i <= rowNumber; i++) {
                    if (rowNumber < 1 || rowNumber > 24) {
                        document.getElementById('error').innerText = ('O número de horas precisa de ser entre 1 e 24.');
                        document.getElementById('error').style.color = 'red';
                        return false;
                    } else {
                        document.getElementById('error').innerText = '';
                    }
                    const row = document.createElement('tr');
                    const th = document.createElement('th');
                    const td2 = document.createElement('td');
                    th.setAttribute("class", "text-center");
                    td2.setAttribute("class", "text-center");
                    const priceInput = document.createElement('priceInput');
                    priceInput.type = 'number';
                    priceInput.setAttribute("class", "text-center");
                    th.append(i);
                    td2.append(input);
                    row.append(th);
                    row.append(td2);
                    rows.push(row);
                }
                aTable.innerHTML = "";
                rows.forEach(row => aTable.append(row));
            }
        }
    </script>

Я хотел бы, чтобы модель, которую я использую, работала с данными (хранящимися в базе данных), вставленными в эти динамические строки, поскольку они имеют текстовые поля внутри. Я боролся с добавлением этой функциональности, так как не могу использовать Html.EditorFor для создания текстовых полей внутри кода JavaScript.

Любая помощь приветствуется, извините, если это сбивает с толку.

  • 1
    Страница сервера запускается ( выполняет методы C #, такие как Html.EditorFor ) и генерирует HTML. Клиентский браузер отображает HTML и выполняет JavaScript . Обратите внимание, что существует строгое разделение контекстов выполнения и что все (и только вещи), которые попадают в HTML (или ресурс JavaScript, например), «каким-либо способом», могут использоваться на клиенте.
  • 0
    Проверить этот ответ
Показать ещё 3 комментария
Теги:
asp.net-mvc

1 ответ

0

Если ваш javascript находится в представлении, вы можете установить переменную в виде строки html: -

<script>
    var input = '@Html.EditorFor(model => model.CertificateCode, new { htmlAttributes = new { @class = "form-control", id = "priceInput", type = "number" } })';
</script>

input теперь будет html-строкой элемента input.

затем вы можете создать элемент js, передав input строку этому:

function createElementFromHTML(htmlString) {
  var div = document.createElement('div');
  div.innerHTML = htmlString.trim();

  // Change this to div.childNodes to support multiple top-level nodes
  return div.firstChild; 
}

или, если у вас есть jQuery, вы можете просто использовать:

<script>
  var input = '@Html.EditorFor(model => model.CertificateCode, new { htmlAttributes = new { @class = "form-control", id = "priceInput", type = "number" } })';
  var element = $(input);
</script>
  • 0
    Я попробовал немного jQuery, но все, что я получаю, это текст HTML вместо фактического компонента. Я делаю что-то неправильно?

Ещё вопросы

Сообщество Overcoder
Наверх
Меню