MVC TextBoxFor(model => model [i] .prop)在javascript for循环中

时间:2013-10-25 15:10:20

标签: c# javascript jquery asp.net-mvc-4 razor

我想让这段代码有效:

$('#ddl').change(function () {

            $('#cont').html('');
            var count = getCount($('#ddl').val())
            for (var i = 0; i < count ; i++) {
                var html = '<div class="display-row">' +
                '<div class="display-label">' +
                'Vrednost:' +
                '</div>' +
                '<div class="display-field">' +
                'Od: @Html.TextBoxFor(model => model[i].Od)  Do:@Html.TextBoxFor(model => model[i].Do)' +
            '@Html.ValidationMessageFor(model => model[i].Do)' +
                    '</div>' +
                '</div>';
                $('#cont').append(html);
            }

        });

我只需要在js循环中获取i的{​​{1}}值。

我如何实现这一目标?

3 个答案:

答案 0 :(得分:0)

你不能这样做。 ASP.NET在服务器上生成,Javascript仅在您的Web浏览器中运行

答案 1 :(得分:0)

“我只需要在js循环中获取模型[i]的i值。”

如果您需要,可以发出ajax请求并将模型检索为json对象。然后迭代你的列表并做你想做的事。

在您的控制器中创建一个将返回模型列表的操作方法:

return json(your model list);

并在js中执行:

$.post(url, {}, function(data){
    for(var i = 0; i < data.lenght; ++i) {
    }

});

修改 当您在服务器端使用@Html.TextBoxFor(model => model[i].Od)时,将生成此html:

<input type="text" name="[i].Od" data-val="true" data-val-required="validationMessage" />

因此您可以自己创建这些标记,并且通常将它们放在表单中。 但是为了验证你可以这样做:

//Remove current form validation information
$("form")
    .removeData("validator")
    .removeData("unobtrusiveValidation");

//Parse the form again
$.validator
    .unobtrusive
    .parse("form");

(此post的最后一个代码)

答案 2 :(得分:0)

ASP.net代码在服务器上运行,首先,在Javascript中发生任何事情之前。当Javascript代码运行时,页面只是文本 - 你不能像那样调用model [i]。您有两种选择:

  1. 如果您的模型相当小,您可以在服务器端代码中,使用razor迭代并生成包含模型中的javascript数组的字符串,将其发送到页面,然后使用您的javascript迭代该数组。

  2. 如果您的模型(或其数据)足够大以至于您不想将其全部内容写入页面,您还可以在控制器上创建一个返回json的方法,并且你的javascript代码通过ajax调用它。