2

Вопрос по c#-4.0, asp.net-mvc-3, .net, asp.net-mvc, jquery – Как связать несколько текстовых полей со свойством строки массива ViewModel?

В ссылке ниже есть кнопка «Добавить», которая позволяет вам добавлять несколько текстовых полей, которые я использую в моем приложении.

http://jsfiddle.net/cN5SR/200/

Теперь я хочу знать, как я могу связать этот массив строковых значений с моей ViewModel.

скажем, если мое свойство во ViewModel такое, как показано ниже:

Public class MyViewmodel
{
   Public string[] players { get; set; }
}
  • Error: User Rate Limit ExceededSee the FAQ where it mentions answers that are 'barely more than a link'.Error: User Rate Limit Exceeded

    от
  • Если все текстовые поля имеют название «игроки» ModelBinder добавит каждое значение текстового поля в массив. Другой вариант - присвоить каждому текстовому полю индекс с индексом: Players [0], Players [1] и т. Д., Но тогда вам нужно управлять индексами, а НЕ пропускать их.

    от Nick Bork
  • если каждое текстовое поле имеет одно и то же имя, вы в основном изображаете «игрок = игрок1» и «игрок = игрок2» и «игрок = игрок3»; и это приведет к тому, что массив будет автоматически сконструирован ModelBinder

    от Nick Bork
  • Вы имеете в виду, что он по умолчанию создаст строку массива?

    от updev
  • 0

    Стивен Сандерсон написал

    очень хороший пост в блоге именно на эту тему.

  • 1

    Если бы я делал это статически

    я бы сделал это следующим образом, используя синтаксис Razor.

    @for(int i = 0; i < Model.players.Length; i++)
    {
       @Html.EditorFor(m => m.players[i]);
    }
    

    Это приводит к следующей разметке:

    <input class="text-box single-line" id="players_0_" name="players[0]" type="text" value="Bob" />
    <input class="text-box single-line" id="players_1_" name="players[1]" type="text" value="Sam" />
    

    Так что, если вы добавите два ввода, используя javascript, который выглядит следующим образом, и отправите его на свой контроллер, связыватель по умолчанию создаст массив игроков с 4 элементами. Я надеюсь, что вы видите скороговорку.

    <input class="text-box single-line" id="players_2_" name="players[2]" type="text" value="Pete" />
    <input class="text-box single-line" id="players_3_" name="players[3]" type="text" value="Dirk" />
    

    Есть некоторые проблемы. Я делал это раньше, и у меня было несколько проблем с удалением. Я не могу вспомнить точные проблемы и что я сделал, чтобы исправить это в этот момент.