在循环中创建的文本框ID

时间:2014-03-07 14:16:29

标签: c# jquery

我希望textbox的更改事件上的每个文本框的ID。我已经为此完成了代码,但我没有得到预期的结果。我在这里得到文本框的值,这是每个文本框中的“金额”。

这是我的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);
        });

2 个答案:

答案 0 :(得分:0)

如果我猜对了,那么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/

答案 1 :(得分:0)

我建议使用类似的东西:

new { data_id = item.id }

只是因为EditFor帮助器正在覆盖ID属性,以便正确映射到您的模型。如果您使用的是EditorFor,则不应混淆ID和name属性。

而是使用我上面所说的,然后像这样取:

$('input[type="text"]').change(function () {
    var id = $(this).data('id');
    alert(id);
});

另外,请确保您的ViewBag.Countries具有正确的国家/地区ID值...

还有一件事:“这个”和“$(this)”不一样。对于你的JQuery代码,你需要有$(this),如果你想引用触发更改事件的元素...