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

Я создал метод в моем HomeController под названием Media, который получает число, в соответствии с этим номером мое приложение создает «n» количество входов. Проблема, которая у меня есть, заключается в том, что я должен получить значения «n» количества входных данных для вычисления среднего арифметического числа введенных чисел. Это мой HomeController:

using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;

namespace Media.Controllers
{
    public class HomeController : Controller
    {
        public ActionResult Index()
        {
            return View();
        }

        public ActionResult About()
        {
            ViewBag.Message = "Your application description page.";

            return View();
        }

        public ActionResult Contact()
        {
            ViewBag.Message = "Your contact page.";

            return View();
        }

        public ActionResult Media()
        {
            return View();
        }

        [HttpPost]
        public ActionResult Media(int numero) {
             String elements = null;
             //elements= "<form action="Media" method='post'>";
            for (int i = 1; i <= numero; i++) {
                elements += "<input type= 'text' id='n"+i+"'"+"name='n"+ i + "'>" +""+"</input><br/>";
            }
            ViewBag.elements = elements + "<button id='btnCalcular'>Calcular media</button>";
                //"<button type="submit" id="button" name="button" action="Media" >Enviar</button> </ form > ";
            return View();
        }
    }
}

А это мой cshtml:

@{
    ViewBag.Title = "Media";
}
    <form action="Media" method="post">
        <h2>Media de n números</h2>
        Ingrese el número de elementos:<br />
        <input type='text' id='numero' name='numero' />
        <button type="submit" id="button" name="button" >Enviar</button>
    </form>

@Html.Raw(ViewBag.elements)

Это мой результат:

This is my result

Знаете ли вы какой-либо способ доступа к этим значениям? Любая помощь действительно оценивается.

1 Ответ

1 голос
/ 25 октября 2019

Есть несколько возможностей. Одним из них является использование JavaScript для чтения всех значений:

function getValues() {
    const values = [...document.querySelectorAll('input')]
        .filter(a => /^n[0-9]{1,}$/.test(a.getAttribute('id')))
        .map(a => a.value)
        .join(',');
    console.log(values);
    // TODO Make some operation like ajax
}
<input type="text" id="n1">
<input type="text" id="n2">
<input type="text" id="n3">
<button onclick="getValues()">Post</button>

Другой способ - сохранить ссылку на форму и обработать в бэкэнде:

@{
    ViewBag.Title = "Media";
}
<form action="Media" method="post">
    <h2>Media de n números</h2>
    Ingrese el número de elementos:<br />
    <input type='text' id='numero' name='numero' />
    <button type="submit" id="button" name="button" >Enviar</button>
</form>

<form action="Test" method="post">
    @Html.Raw(ViewBag.elements)
    <!-- store amount of elements -->
    <input type="hidden" name="myControl" value="@ViewBag.n" />
</form>

Контроллер:

 [HttpPost]
 public ActionResult Media(int numero) {
     // (...)
     ViewBag.n = numero;
     // (...)
 }

 [HttpPost]
 public ActionResult Test(int n) {
     // Example of how read posted values
     for (var i = 0; i < n; i++) {
         var valueN = Request.Form["n" + i.ToString()];
     }
 }
...