Как передать поля (которые создаются динамически) из представления в контроллер?

Я новичок в MongoDB. Мое приложение представляет собой построитель динамических форм, который позволяет пользователям добавлять в форму динамические поля. Ни одно из полей в форме не является фиксированным или статическим. Пользователь может добавить в форму любое число и поля любого типа, такие как поля Textbox, Textarea, Dropdown, Checkbox, Radiobutton и т. д., и сохранить форму.

Теперь хотите сохранить созданные поля в базе данных. затем сохраненные формы будут использоваться для сбора данных от пользователей.

Как передать поля из представления в контроллер? и описать модель и контроллер для этого (для обработки полей)?

Я использую ASP.NET MVC в качестве интерфейса MongoDB в качестве сервера

Я нажимаю все поля здесь:

$('.field').each(function() {

    var $this = $(this);

    //field type
    var fieldType = $this.data('type');

    //field label
    var fieldLabel = $this.find('.field-label').val();

    //field required
    var fieldReq = $this.hasClass('required') ? 1 : 0;

    //check if this field has choices
    if($this.find('.choices li').length >= 1) {

        var choices = [];

        $this.find('.choices li').each(function() {

            var $thisChoice = $(this);

            //choice label
            var choiceLabel = $thisChoice.find('.choice-label').val();

            //choice selected
            var choiceSel = $thisChoice.hasClass('selected') ? 1 : 0;

            choices.push({
                label: choiceLabel,
                sel: choiceSel
            });

        });
    }

    fields.push({
        type: fieldType,
        label: fieldLabel,
        req: fieldReq,
        choices: choices
    });
});

Сохранение формы с динамическими полями:

var formArray=[];
  formArray.push({ name: "formID", value: "formID" }, { name: "formFields", value: "fields" });
  var formObject = JSON.stringify(formArray);
          $.ajax({
              method: "POST",
              url:'@Url.Action("Index", "Home")',
              data: formObject,
              dataType: 'JSON',
              success: function (data)
              {
                  console.log(data);
                  $('.alert').removeClass('hide');
                  $("html, body").animate({ scrollTop: 0 }, "fast");

                  //Demo only
                  $('.alert textarea').val(JSON.stringify(fields));
              }
          });

Может ли кто-нибудь предложить модель и контроллер для этого?

Обновлять

Как предложил @stom, я сделал следующие исправления:

Модель

namespace Simple_jQuery_Form_Builder.Models
{
    public class ControlsAttribute
    {
        public string id { get; set; }
        public string value { get; set; }
        public string name { get; set; }
    }
    public class FormControl:ControlsAttribute
    { 
        public object textBox { get; set; }
        public object textArea { get; set; }
        public object checkBox { get; set; }
        public object radioButton { get; set; }
        public object agreeBox { get; set; }
        public object selectBox { get; set; }
        public object datePicker { get; set; }
    }
    public class Simple_jQuery_Form_Builder_Model
    {
        public List<FormControl> controls { get; set; }
        public List<FormControl> formEditor { get;set; }

    }

}

Просмотреть

 <form method="post" action="~/Controllers/Home/Index">
                <div id="sjfb" novalidate>
                    <div id="form-fields">
                        @using (Html.BeginForm("Index", "Home", FormMethod.Post))
                        {
                            @Html.DisplayFor(model => model.controls);
                            @Html.DisplayFor(model => model.formEditor);
                        }
                    </div>
                    <button type="submit" class="submit">Save Form</button>
                </div>
            </form>

Контроллер

[HttpPost]
public ActionResult Index(Simple_jQuery_Form_Builder_Model model)
{
    if (model != null)
        return Json("success");
    else
        return Json("An error has occured");
}

Предполагается, что сохраненная форма будет отображаться в нужной ссылке/div. Он показывает сообщение «успех». Теперь я должен показать созданную форму в другом представлении (например, в предварительном просмотре).


person Iswarya    schedule 23.03.2018    source источник
comment
Ваш json привязывается к модели, которая имеет свойства string Name и string Value, а в методе POST будет public ActionResult(IEnumerable<yourModel> model). Вам также необходимо установить contentType: 'application/json' для привязки к модели.   -  person    schedule 23.03.2018
comment
Пожалуйста, прочитайте При каких обстоятельствах я могу добавить «срочно» или другие подобные фразы к моему вопросу, чтобы получить более быстрые ответы? - Подводя итог, можно сказать, что это не идеальный способ обращения к волонтерам и, вероятно, контрпродуктивно для получения ответов. Пожалуйста, воздержитесь от добавления этого к своим вопросам.   -  person halfer    schedule 23.03.2018
comment
@Iswarya, у ваших последних правок много проблем, 1. у ваших моделей нет никаких отношений. 2. Использование @Html.DisplayFor не позволит отправлять значения в метод действия, вместо этого используйте @Html.HiddenFor , существует много кода для предоставления решения, что сейчас невозможно. Совет Вам изучить MVC и Jquery основы из здесь и идти дальше. Также, пожалуйста, отформатируйте свое редактирование правильно, чтобы его могли прочитать другие.   -  person Shaiju T    schedule 23.03.2018


Ответы (1)


Сначала создайте модели просмотра.

public class FormViewModel
{
    public string name { get; set;}
    public string value { get; set;}
}

Методы действий

Это для загрузки вашей формы в запросе GET.

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

Это для публикации ваших данных в запросе POST.

 [HttpPost]
 public ActionResult SaveForm(IEnumerable<FormViewModel> model)
  {
        if (model != null)
        {
            return Json("Success");
        }
        else
        {
            return Json("An Error Has occoured");
        }

   }

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

Добавьте это в свой Index.cshtml вид

<script src="~/Scripts/jquery-1.10.2.min.js"></script>
<script>
    $(function () {

    $('#saveInMongo').click(function (e) {

      var formArray=[];

          formArray.push({ name: "formID", value: "formID" }, { name: "formFields", value: "fields" });
      var formObject = JSON.stringify(formArray);

            $.ajax({
                url: "@Url.Action("Home","SaveForm")",
                type: "POST",
                data: formObject,
                contentType: "application/json; charset=utf-8",
                dataType: "json",
                error: function (response) {
                    alert(response.responseText);
            },
                success: function (response) {
                    alert(response);
                }
            });

        });
    });
</script>

<input type="button" value="Save In Mongo" id="saveInMongo" />

Это должно работать.

Проверьте это для получения дополнительной информации.

person Shaiju T    schedule 23.03.2018
comment
Спасибо за ваш немедленный ответ @stom :) - person Iswarya; 23.03.2018
comment
@Iswarya, если вы нашли этот ответ полезным, проголосуйте за него или примите ответ, поставив галочку слева от ответа. - person Shaiju T; 23.03.2018
comment
У меня есть некоторые сомнения. как я могу вам ответить? Я также не могу поднять еще один Вопрос. В разделе комментариев нет ограничений. слов. Как я могу развеять свои сомнения? - person Iswarya; 23.03.2018
comment
@Iswarya, вы можете отредактировать свой вопрос и добавить больше информации о проблеме, с которой вы столкнулись, чтобы другие тоже могли вам помочь, или вы можете задавать вопросы по одному в комментариях. - person Shaiju T; 23.03.2018