Я хочу идентификатор каждого текстового поля в событии изменения текстового поля. Я сделал код для этого, но я не получаю ожидаемого результата. Я получаю значение текстового поля здесь, которое является "Сумма" в каждом текстовом поле.
Вот мой html-код: -
@foreach (var item in ViewBag.countries)
{
<td>@Html.EditorFor(model => model.Amount, new { id = item.ID })</td>
}
Вот мой код jquery:
$('input[type="text"]').change(function () {
var id = this.id;
alert(id);
});
Если я правильно догадываюсь, значение вашего Editorfor
неверно. В этом случае это должно быть @Html.EditorFor(model => model.Amount, Model.Amout, new {id = item.ID})
. Попытайтесь, я думаю, это должно сработать.
Это потому, что второй параметр EditorFor
связывается с моделью и не является атрибутом Html.
Более того, я предлагаю вам всегда работать с циклом for
в представлении, потому что привязка может вызвать проблемы с циклом foreach.
Поэтому в вашем случае это будет выглядеть так:
@for(int i = 0; i < ViewBag.countries.Count; i++)
{
<td>
@Html.EditorFor(model => model.Amount, Model.Amount, new { id = item.ID })
</td>
}
Подробное объяснение: http://haacked.com/archive/2008/10/23/model-binding-to-a-list.aspx/
Я предлагаю использовать что-то вроде:
new { data_id = item.id }
просто потому, что атрибут ID переписывается помощником EditorFor для правильной сопоставления с вашей моделью. Идентификатор и атрибуты имени не должны смешиваться, если вы используете редактор.
Вместо этого используйте то, что я сказал выше, а затем сделаем следующее:
$('input[type="text"]').change(function () {
var id = $(this).data('id');
alert(id);
});
Также убедитесь, что ваши ViewBag.Countries имеют правильные значения для идентификаторов страны...
Еще одна вещь: "это" не то же самое, что "$ (это)". В случае вашего кода JQuery вам нужно иметь $ (это), если вы хотите ссылаться на элемент, вызвавший событие изменения...