Как передать динамически созданные значения текстового поля из представления в контроллер в MVC - PullRequest
0 голосов
/ 14 февраля 2019

Я хочу передать все значения из динамически генерируемых текстовых полей из представления в контроллер.

Моя модель:

public class QuestionModel
{
    [Required(ErrorMessage = "{0} is required")]
    [Display(Name = "Question here")]
    public string Question { get; set; }
}

Мой просмотр:

@using (Html.BeginForm("Add_Question", "Home", new { ReturnUrl = ViewBag.ReturnUrl }, FormMethod.Post, new { @class = "form-horizontal", role = "form" }))
        {
            <div class="form-group">
                    //here I'm generating dynamic textboxes
                    @for (int i = 1; i <= numberOfQuestions; i++)
                    {
                        <div class="col-md-12">
                            @Html.LabelFor(model => model.Question, new {  })
                            @Html.TextBoxFor(model => model.Question, "", new { @required = "required", @class = "form-control" })
                            @Html.ValidationMessageFor(model => model.Question, "", new { @class = "text-danger" })
                        </div>
                    }
                </div>

                <div class="form-group">
                    <div class="col-md-12">
                        <input type="submit" value="Done" class="btn-success form-control" />
                    </div>
                </div>
        }

Мой контроллер:

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

    [HttpPost]
    public ActionResult Add_Question(QuestionModel model)
    {
        //Get all textbox values here
        return RedirectToAction("Home", "Home");
    }

Должен ли я создать список строк для этого?Если да, то как?Пожалуйста, помогите.

Ответы [ 3 ]

0 голосов
/ 14 февраля 2019

Вы можете слегка изменить свойство viewmodel и цикл внутри представления так, чтобы он содержал каждый элемент из List<string>, например:

Модель

[Display(Name = "Question here")]
public List<string> Question { get; set; }

Представление

@for (int i = 0; i < numberOfQuestions; i++)
{
    <div class="col-md-12">
    @Html.LabelFor(model => model.Question)
    @Html.TextBoxFor(model => model.Question[i], "", new { @required = "required", @class = "form-control" })
    </div>
}

Обратите внимание, что индекс сбора начинается с нуля, поэтому первый вопрос должен иметь индекс 0.

Дополнительное примечание:

Возможно, вам потребуется создать пользовательский атрибут проверки для List<string>, как указано в этой ссылке , поскольку по умолчанию RequiredAttribute проверяет только нулевое значение, а не общее количество элементов всей коллекции (пустая коллекция с Count = 0 равнане нулевой).

Проблема, связанная с данной:

массив текстовых полей бритвы Asp.net для элементов списка

0 голосов
/ 14 февраля 2019
you can retrieve the values using the Formcollection object, but your dynamically created text boxes should have unique id for eg:- Question1, Question2 etc.

And then you can loop through Formcollection object.

below code is just for single textbox you need to create loop and retrieve

public ActionResult AddQuestion(FormCollection form)
        {
            string question1 = form["Question1"].ToString();           
            return View();
        }
0 голосов
/ 14 февраля 2019

Вернуть вид с моделью:

[HttpPost]
public ActionResult Add_Question(QuestionModel model)
{
    return View(model);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...