【问题标题】:JavaScript Asp.net repeating controlsJavaScript Asp.net 重复控件
【发布时间】:2013-08-16 20:10:43
【问题描述】:

我正在尝试使用 Asp.net 3.5/IIS 进行以下操作

具有顶级可重复表单的 Web 表单。所以基本上是 Order->Products->ProductsParts 有点场景。订单只有一个。产品是可重复的。每个产品都有可重复的产品部件。产品和产品部分有一大堆字段,所以我不能使用网格。

因此,我为产品添加/删除按钮,并在每个产品中为每个产品部分添加/删除按钮。

这是我的要求。在使用 jquery/js 进行一些研究后,我已经能够实现添加/删除。我如何在服务器上捕获这些数据?由于javascript正在添加和删除这些控件,它们不是服务器端的,我不知道如何正确分配名称属性。我正在尝试使用 javascript,但它不起作用:

function onAddProperty(btnObject){
var previous = btnObject.prev('div');
var propertyCount = jquery.data(document.body, 'propertyCount');

var newDiv = previous.clone(true).find("*[name]").andSelf().each(function () { $(this).attr("name").replace(($(this).attr("name").match(/\[[0-9]+\]/), cntr)); }); ;

propertyCount++;
jquery.data(document.body, 'propertyCount', propertyCount);

//keep only one unit and remove rest
var children = newDiv.find('#pnlUnits > #pnlUnitRepeater');
var unitCount = children.length;
var first = children.first();
for (i = 1; i < unitCount; i++) {
    children[i].remove();
}

newDiv.id = "pnlPropertySlider_" + propertyCount;

newDiv.insertBefore(btnObject);
}

我需要将 name 属性分配为数组,以便我可以在 Request.Form 中读取它

修复不更新 ID 不起作用的问题:

  var newDiv = previous.clone(true).find("input,select").each(function () {
    $(this).attr({
        'name': function () {
            var name = $(this).attr('name');
            if (!name) return '';
            return name.replace(/property\[[0-9]+\]/, 'property' + propertyCount);
        }
    });
}).end().insertBefore(btnObject);

【问题讨论】:

  • 这种类型的东西应该可以工作。如果您使用 Request.Form,您将可以访问所有回发时带有名称的输入。您遇到的问题是命名问题,但如果没有看到您的 html,我无能为力。
  • Request.Form 没有动态创建的控件。我检查了每个属性,包括 HtmlNameValue 对或其他东西。但是我在其他地方找到的解决方案基本上是使用 jquery 来序列化表单并进行回发。我什至检查了浏览器发布的内容,它没有任何动态控件。所以,基本上你不能使用 ASP.Nets 提交表单机制,它肯定会从视图状态中获取信息。我必须尝试禁用视图状态。我将发布我的调查结果

标签: javascript jquery asp.net webforms


【解决方案1】:

问题类似于以下行:

$(this).attr("name").replace(($(this).attr("name").match(/\[[0-9]+\]/), cntr));

这个语句没有做任何事情。 JavaScript 中的字符串是不可变的,.replace 只返回替换的字符串。

然后您必须将attr("name") 实际设置为具有替换值的新字符串: http://api.jquery.com/attr/

如果没有看到您的 HTML,我无能为力。

【讨论】:

  • Tx 提示。我能够使用以下代码解决它。
猜你喜欢
  • 2012-04-16
  • 1970-01-01
  • 1970-01-01
  • 2020-03-03
  • 2012-02-15
  • 1970-01-01
  • 2016-04-01
  • 2011-07-20
  • 1970-01-01
相关资源
最近更新 更多