Добавление полей динамической формы в приложение ASP.NET Core MVC - PullRequest
0 голосов
/ 26 января 2019

В моем приложении я хочу создать модель, которая может иметь динамический список атрибутов:

Класс провайдера

using System;
using System.Collections.Generic;

namespace DynamicForms.Models
{
    public class Provider
    {
        public String Name { get; set; }
        public List<Attribute> Attributes { get; set; }

        public Provider()
        {
            Attributes = new List<Attribute>();
        }
    }
}

Мой контроллер имеет два метода.Один для добавления дополнительных атрибутов в текущую модель и один для сохранения модели провайдера.Метод добавления дополнительных атрибутов выглядит следующим образом:

    [HttpPost]
    // Add attribute to current provider model
    public IActionResult Index(Provider provider)
    {
        provider.Attributes.Add(new Models.Attribute());
        return View(provider);
    }

И мой вид выглядит следующим образом:

@model Provider
@using (Html.BeginForm())
{
    <div>
        @Html.TextBoxFor(m => m.Name)
        <input type="submit" value="Add attribute" formmethod="post"/>
    </div>
    <div>
        @foreach ( var attribute in Model.Attributes)
        {
        <div>
            @Html.TextBoxFor(a => attribute.Name)
            @Html.TextBoxFor(a => attribute.Value)
        </div>
        }
    </div>
    <div>
        <input type="submit" value="Save form" formaction="Provider/Save" formmethod="post"/>
    </div>
}

При нажатии кнопки «Добавить атрибут» добавляется атрибут кнопки и строка вводаполя появляются.Однако, когда я нажимаю кнопку еще раз, ничего не происходит.Никакая другая строка не добавлена.Количество атрибутов модели по-прежнему равно 1. Я искал решения по всей сети, но не смог найти ничего, что решило бы мою проблему.Как сделать так, чтобы поля формы динамически добавлялись в модель и отображались в vieW?

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Попробуйте перебрать свой список с индексом вместо foreach, например,

@for (var i = 0; i < Model.Attributes.Count; i++)
{
  <div>
    @Html.TextBoxFor(a => Model.Attributes[i].Name)
    @Html.TextBoxFor(a => Model.Attributes[i].Value)
  </div>
}

Вы хотите, чтобы имена форматировались примерно так: Атрибуты [0]. Имя и т. Д.

0 голосов
/ 26 января 2019

Вы написали метод для Post, но вы написали метод для get.

Get метод

   public IActionResult Index()
    {
        Provider provider = new Provider();
        provider.Attributes.Add(new Models.Attribute());
        return View(provider);
    }

Метод Post

   [HttpPost]
    // Add attribute to current provider model
    public IActionResult Index(Provider provider)
    {
        provider.Attributes.Add(new Models.Attribute());
        return View(provider);
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...