转换为razor语法的问题,用于jQuery生成的动态文本框的模型绑定

时间:2012-02-25 20:46:45

标签: jquery asp.net-mvc razor model-binding

我需要在客户端动态生成的文本框中模拟绑定数据(使用jQuery .tmpl插件),以便在我的MVC3控制器中访问数据。我在以下链接找到了代码:

http://www.progware.org/Blog/post/ASPNET-MVC-Binding-to-Listse28093Enumerables-on-POST-with-JQuery.aspx

本文讨论了几种与工作源代码一起使用的方法。最后一种方法是我想要的,它的工作原理。但它可能使用webforms视图引擎(在JavaScript块内)或仅使用服务器端标记。如果有人能帮助我使用剃刀语法,我将不胜感激。

特别是我希望在代码中获得以下块的剃刀语法:

<script type="text/javascript">
    <%int idx=0;
      foreach (var c in Model){ 
        ViewData["key"]=idx; %>
        $("#ClientTemplate").tmpl([{FirstName : "<%: c.FirstName %>",  
                                    LastName : "<%:c.LastName %>" ,
                                    idx: <%:idx.ToString()     %>}]).appendTo("#ExistingClients");
        <% idx++;%>
    <%} %>
</script>
<script type="text/javascript">
    function removeClient(DivName) {$("#" + DivName).remove();}
    var num = <%:Model.Count() %>;
    $("#btnAddNewClient").click(function () {
        $("#ClientTemplate").tmpl([{FirstName : "",  
                                    LastName : "" ,
                                    idx: num}]).appendTo("#NewClients");
        num++;
    });
</script>

2 个答案:

答案 0 :(得分:0)

这样的事可能有用:

<script type="text/javascript">
    @{
        int idx = 0;
        foreach (var c in Model)
        {
            ViewData["key"] = idx; 

            <text>
                $("#ClientTemplate").tmpl([{FirstName : "@c.FirstName",  
                    LastName: "@c.LastName" ,
                    idx: @idx.ToString()}]).appendTo("#ExistingClients");        
            </text>

            idx++;
        } 
    }
</script>

<script type="text/javascript">
    function removeClient(DivName) {$("#" + DivName).remove();}
    var num = @Model.Count();
    $("#btnAddNewClient").click(function () {
        $("#ClientTemplate").tmpl([{FirstName : "",  
                                    LastName : "" ,
                                    idx: num}]).appendTo("#NewClients");
        num++;
    });
</script>

我发现暂时删除脚本标签有助于防止VS2010s剃须刀解析器混淆。

答案 1 :(得分:0)

我无法以我之前想到的方式工作。我最终创建了一个javascript对象,其属性名称与我的C#对象相同,然后使用jquery .ajax调用将对象发送到控制器方法。