ModelBinder неправильно привязан к списку при отправке - PullRequest
1 голос
/ 27 декабря 2011

Я пытаюсь правильно настроить HTML-код для флажков, чтобы они могли связываться со свойством списка, но, похоже, не могут это сделать успешно В приведенном ниже коде у меня есть пять флажков. Связывается только тогда, когда я проверяю хотя бы первый флажок. Если я установлю все четыре флажка, кроме первого, ничто не будет связано.

Это код, который у меня есть:

  public class People
  {
    public List<Person> Crew { get; set; }
    public string TeamName { get; set; }

    public List<string> StatesLiveIn { get; set; }

  }

  public class Person
  {
    public string FirstName { get; set; }
    public string LastName { get; set; }
    public int Age { get; set; }
  }

Вид:

@model TestBinder.Models.People

@{
    ViewBag.Title = "Home Page";
}

@using (Html.BeginForm()) 
{ 

  @Html.TextBoxFor(m => m.TeamName);  


  <h2>Crew #0</h2>
  <h3>FirstName:</h3>                                  
  @Html.TextBoxFor(m => m.Crew[0].FirstName); <br />

  <h3>LastName: </h3>
  @Html.TextBoxFor(m => m.Crew[0].LastName);<br />

  <h3>Age: </h3>
  @Html.TextBoxFor(m => m.Crew[0].Age);<br />


  <h3>States Lived In: </h3>
  int i = 0;
  foreach (string state in new List<string>() { "NY","NJ","FL","IL","TX" })
  {     
    @state <input checked="checked" type="checkbox" value="@state" name="StatesLiveIn[@i]" /><br />  
    i++;
  }                                             

  <input type="submit" value="submit" />
}

Контроллер:

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

[HttpPost]
public ActionResult Index(People p)
{    
  return View(p);
}

Спасибо.

1 Ответ

2 голосов
/ 27 декабря 2011

Попробуйте присвоить вашим флажкам одно и то же имя:

<h3>States Lived In: </h3>
foreach (var state in new[] { "NY", "NJ", "FL", "IL", "TX" })
{     
    @state 
    <input checked="checked" type="checkbox" value="@state" name="StatesLiveIn" />
    <br />  
}

Но лучшей альтернативой является использование модели представления, шаблонов редактора и строго типизированного помощника CheckBoxFor, поскольку вы жестко закодировали атрибут checked="checked"и если есть ошибки проверки, и вы отображаете то же представление в действии POST, пользователь потеряет свой выбор.

...