модели
public class IntegerList
{
public int IntegerListID { get; set; }
public string Direction { get; set; }
public long Performance { get; set; }
public virtual ICollection<Integer> Integers { get; set; }
}
public class Integer
{
public int IntegerID { get; set; }
[Required(ErrorMessage = "An integer is Required")]
[Range(0, 9999999, ErrorMessage = "Enter an integer")]
public int IntegerValue { get; set; }
public int IntegerListID { get; set; }
public virtual IntegerList IntegerList { get; set; }
}
Вышеупомянутые модели предназначены для приложения, которое сортирует диапазон целых чисел в порядке возрастания или убывания и вычисляет время, затраченное на выполнение сортировки.
Целые числа вводятся в текстовые поля пользователем, который может добавлять или удалять их с помощью jquery.
У меня есть приложение, работающее, передавая formcollection контроллеру, разделяя цепочку целых чисел на массив целочисленных значений, добавляемых в IntegerList.Integers.
Тем не менее, я ищу более элегантное строго типизированное решение.
ViewModel
public class IntegerViewModel
{
[UIHint("Integers")]
public IEnumerable<Integer> Integers { get; set; }
public string Direction { get; set; }
}
Там, где я изо всех сил стараюсь добавить в представление Integers.IntegerValues, чтобы они могли быть переданы контроллеру через viewmodel. Мне также нужно увеличивать/уменьшать каждое значение текстового поля IntegerValue, поскольку оно добавляется/удаляется jquery. Я не уверен, что приближаюсь к этому под прямым углом.
Надеюсь, это ясно. Спасибо за вашу помощь.
бритва
<form method="post">
<div id="integers">
@Html.Label("Enter Integers")
<div class="integer">
@Html.EditorFor(model => model.Integers)
<a href="#" id="addInt">Add Integer</a>
</div>
</div>
@Html.Label("Sort Direction")
<div>
@Html.DropDownListFor(model => model.Direction, new[] {
new SelectListItem() {Text = "Ascending", Value = "Ascending"},
new SelectListItem() {Text = "Descending", Value = "Descending"}
})
<input class="button" type="submit" value="Submit" />
</div>
</form>
Шаблон редактора (для целых)
@model Integer
@Html.EditorFor(m => m.IntegerValue)
Позвольте мне подвести итог всему.
Вы не найдете там строго типизированного решения, поскольку вы добавляете и удаляете значения (целые числа) с помощью JavaScript (jQuery).
Итак, когда вы добавляете целочисленный редактор, используя jquery, вы должны отображать соответствующий HTML в соответствии с контрактами ASP.NET MVC.
Комментарий Дэвида очень ценен. Проверьте эту ссылку. http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx
Здесь вы можете увидеть, как вы должны отображать HTML-код для получения различных типов данных на сервере (действие ASP.NET MVC).
Также вы можете проверить свой редактор для вывода и визуализации HTML, как это было визуализировано с помощью MVC.
И, наконец, вот вопрос о динамических полях формы в ASP.NET MVC. Динамические формы ASP.NET MVC
Надеюсь это поможет.