Проблема вашего подхода в том, что атрибут имени, который вы исправили, установил значение «Id». MVC связывает коллекцию, добавляя «[index]» в качестве префикса к атрибуту имени HTML. Вы можете найти более подробную информацию об этом здесь - https://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
Так , если вы удалите это new { name = "Id" }
и используете for
вместо foreach
, ваш Razor будет выглядеть примерно так:
@for (int i=0; i < Model.Count; i++)
{
@Html.DisplayFor(modelItem => Model[i].Id)
@Html.HiddenFor(modelItem => Model[i].Id)
....
}
И результат скрытого ввода должен выглядеть примерно так: [ 118]
Необходимо добраться, текст в переменную затем удаляют его из DOM. Разделите его, затем вставьте первую часть, затем Ваш узел промежутка затем вторая часть.
var p = document.getElementById('myParagraph');
var text = p.childNodes[0];
// Split the text
var len = 5
var text1 = text.nodeValue.substr(0, len);
var text2 = text.nodeValue.substr(len);
var span = document.createElement('span');
span.appendChild(document.createTextNode(' dolor'));
// Remove the existing text
p.removeChild(p.childNodes[0]);
// Put the new text in
p.appendChild(document.createTextNode(text1));
p.appendChild(span);
p.appendChild(document.createTextNode(text2));
Надлежащий путь (использующий DOM-базовые интерфейсы) был бы:
var p = document.getElementById('myParagraph');
var text = p.childNodes[0];
var at = 5;
// create new span node with content
var span = document.createElement("span");
span.appendChild(document.createTextNode('ipsum'));
// Split the text node into two and add new span
p.insertBefore(span, text.splitText(at));
Вы могли проверить узлы innerHTML
свойство и изменяет это. Кроме того, Вы могли бы посмотреть на childNodes
набор и работа с элементами там (удаляющий старый текстовый узел и вставляющий новые узлы в его место).