如何在jquery中为循环变量传递变量

时间:2010-12-19 08:52:06

标签: jquery asp.net-mvc

刚进入JQuery和Asp.net MVC 2,想知道如何将变量从循环传递到javascript函数。

所以我有:

<% int i = 0; %>
<% foreach (var item in Model) { %>

    <tr>
        <td>
         <input type="button" id="btnSubmit" value="Save" onclick="javascript:updatePerson(i);" />
         <input type="text" id='<%= "persons[" + i + "].Name" %>'  name='<%= "persons[" + i + "].Name" %>' value='<%=item.Name %>' />
        </td>

    </tr>

    <% i++; %>
<% } %>

显然

onclick="javascript:updatePerson(i);"

错了。

如何将变量i传递给updatePerson函数?

JD

4 个答案:

答案 0 :(得分:2)

我建议你采取一种不同的,更好的方法,因为我现在看到你将C#,javascript和HTML混合到同一页面中,这导致了所谓的可怕标签汤。

改进1:使用编辑器模板而不是那些foreach循环。在您的主视图中,而不是简单地写下您在问题中发布的内容:

<%= Html.EditorForModel() %>

然后定义一个编辑器模板,该模板将自动为模型集合中的每个元素调用(~/Views/Home/EditorTemplates/Person.ascx):

<%@ Control 
    Language="C#"
    Inherits="System.Web.Mvc.ViewUserControl<YourApp.Models.Person>" %>
<tr>
    <td>
        <% using (Html.BeginForm("Save", "Persons", 
            new { id = Model.Id }, FormMethod.Post, 
            new { @class = "saveform" })) { %>
            <%= Html.TextBoxFor(x => x.Name) %>
            <input type="submit" value="Save" />
        <% } %>
    </td>
</tr>

请注意,partial的名称与强类型的类型名称相同(Person.ascx)。另请注意位置:~/Views/Home/EditorTemplates其中Home当然是当前控制器的名称。如果您想在多个控制器之间重用它,它也可以放在~/Views/Shared/EditorTemplates中。并且因为编辑器模板是强类型的视图模型,您可以使用强类型帮助程序,如Html.TextBoxFor,这样您就不必手动硬编码文本框的名称和值,并想知道为什么模型绑定器没有'工作正常。

改进2:在单独的javascript文件中使用jquery逐步增强标记:

$(function() {
    $('.saveform').submit(function() {
        // When the form is submitted
        // For example you could call the associated action using AJAX:
        $.ajax({
            url: this.action,
            type: this.method,
            data: $(this).serialize(),
            success: function(result) {
                alert('successfully saved');
            }
        });
        return false; 
    });
});

答案 1 :(得分:1)

您可以在Javascript表达式中嵌入i的当前值,就像在其余代码中执行此操作一样:

<input type="button" id="btnSubmit" value="Save"
    onclick="updatePerson(<%= i %>);" />

答案 2 :(得分:1)

onclick="javascript:updatePerson(<%=i%>);"

应该工作

答案 3 :(得分:0)

Javascript是客户端,而asp是服务器端。换句话说:

  1. ASP生成html
  2. 将HTML发送到浏览器
  3. 您的javascript由浏览器执行。
  4. 这就是原始代码不起作用的原因。生成的html中不存在i