Я создал в своем 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

Знаете ли вы, как получить доступ к этим значениям? Мы очень благодарны за любую помощь.

0
Antonio 25 Окт 2019 в 18:25
Доступ каким образом? Если вы хотите обработать их с помощью C#, вам нужно отправить значения на сервер, возможно, используя AJAX, или вы можете вычислить их на клиенте. В любом случае вам нужно использовать Javascript для этого.
 – 
Liam
25 Окт 2019 в 18:28
Мне нужно получить значения, введенные во входные данные, чтобы вычислить среднее значение в моем контроллере. @Лиам
 – 
Antonio
25 Окт 2019 в 18:30

1 ответ

Лучший ответ

Есть несколько возможностей. Один из них - использовать 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()];
     }
 }
1
Marcelo Vismari 25 Окт 2019 в 19:40