0

我正在使用 Dojo 在 ASP.Net MVC4 中工作。当我向 html 表添加新行时,我遇到了一个奇怪的问题。我需要一个支持添加和删除行的表格,里面的文本框应该有 dojo 样式。我提到了这篇文章http://blog.stevensanderson.com/2010/01/28/editing-a-variable-length-list-aspnet-mvc-2-style/广告试图创造同样的东西。让我解释一下我的代码。下面是我的看法

@section scripts {
    <script type="text/javascript">
        require(["dojo/parser", "dijit/form/TextBox", "dijit/form/Button"]);
    </script>
}
 <table id="servicesTable">
            <tr>
                <th>
                    <label id="lblSelectService">
                        Select</label>
                </th>
                <th>
                    <label id="lblServiceName">
                        Name</label>
                </th>
                <th>
                    <label id="lblTitle">
                        AE Title</label>
                </th>

            </tr>
            @for (int i = 0; i < Model.Services.Count; i++)
            {
                @Html.Partial("_ServiceRow", Model.Services[i])
            }
        </table>

我渲染每一行的部分视图如下

@model WebUI.Models.RemDevServiceViewModel
    <tr>
        <td>
            @Html.CheckBoxFor(x => x.IsMarked,
                     new { id = @String.Format("Service[{0}]IsMarked", @Model.ID) })
        </td>
        <td>
            <input style="width: 100px; id="Service[@Model.ID]Name"
        name="Service[@Model.ID].Name" type="text"
                     data-dojo-type="dijit/form/TextBox" value="@Model.Name"/>
        </td>
        <td>
            <input style="width: 100px;" id="Service[@Model.ID]Title" 
                        data-dojo-type="dijit/form/TextBox"
                        name="Service[@Model.ID].Title" type="text" 
value="@Model.Title" />
        </td>
    </tr>

我有一个添加按钮,它将向表中添加新行。我面临的问题是,新行没有获得 dojo 样式,它们被呈现为普通文本框。最初加载的行呈现为 dojo 样式的文本框,但新添加的不是这样。我添加新行的 jquery 函数如下所示

function addNewService() {
    $.ajax({
        url: rootPath + "MyController/AddNewService",
        type: "get",
        cache: false,
        success: function (html) {

            $("#servicesTable tbody").append(html);
        },
        error: function (ts) {
            alert("Error while adding services");
        }
    });
}

谁能告诉我如何解决这个问题?请注意,我知道 Dojo 网格的存在。我想利用模型绑定,因此遵循这种风格

4

2 回答 2

0

尝试在添加的节点上运行解析器。您是否也在页面上认真加载 jquery?无论如何,使用您拥有的代码,选择刚刚添加的节点有点棘手,但是如果您将以下内容放在成功方法中,它可能会起作用。

var newNodes = $(html).appendTo("#servicesTable tbody");
require(["dojo/parser"], function(parser){
    newNodes.forEach(function(node){
        parser.parse(node);
    });
});

如果你解析已经解析过的节点,解析器会抛出一个错误。此外,如果您需要支持较旧的浏览器,您需要将 forEach 替换为标准的 for 循环。

于 2013-04-21T19:36:42.393 回答
0

非常感谢大卫的回复。您的代码不能完全正常工作,但我明白了,下面的代码对我有用。请不要觉得我在回答我自己的问题。我想正确格式化代码并因此使用此视图。再次非常感谢

success: function (html) {
        var newNodes = $(html).appendTo("#servicesTable tbody");
        require(["dojo/_base/array", "dojo/parser"], function (array, parser) {
            array.forEach(newNodes, function (node, i) {
             parser.parse(node);
            });
        });
于 2013-04-22T12:48:44.483 回答