【问题标题】:jquery append + code-behindjquery追加+代码隐藏
【发布时间】:2010-11-28 09:33:44
【问题描述】:

我使用 jquery 向 divStaff 动态添加行:

$("span[id$='lblAddStaff']").click(function() {
        //$(".staff_tpl").find("input[id$='txtRate']").val("0,00");
        var staff_row = $(".staff_tpl");
        staff_row.find(".staff_row").attr("id", "Emp" + counter);
        $("div[id$='divStaff']").append(staff_row.html());
        counter += 1;            
    });

我添加的行在隐藏的 div 中,class=".staff_tpl" 我将此 div 的内容附加到 divStaff

当我提交页面(回发)时,如果我尝试这样显示,结果 divStaff 始终为空:

lblTest.Text = divStaff.innerHtml.ToString

基本上,我正在操作一个 div 客户端,我想通过我的 aspx 页面的代码隐藏来访问它的服务器端。我想我在这里遗漏了一个基本原则。

【问题讨论】:

    标签: asp.net jquery append code-behind


    【解决方案1】:

    这是不可能的。
    如果您想访问在页面上创建的数据,您必须将其放置在输入字段中(可能隐藏),并在使用 Request.Form["MyHiddenFieldName"] 发布后访问它。
    <div>s 未发布到服务器。 runat="server" 元素在 ViewState 中回显(一个大字符串,真的 - 你可以在页面的源代码中看到它),给出连续性的抽象(或它的错觉)。但是,这种刺痛并不知道您在 DOM 中所做的更改。
    在处理 runat="server" 元素时,您将看到您在服务器端所做的最后更改,但客户端更改已消失。
    只有<input> (和文本区域、选项等) 值会在提交时发布到服务器,因此在发布页面后,在客户端上更改这些值将在服务器上看到。

    【讨论】:

    • 我的印象是向 div 添加 runat="server" 和唯一​​ ID 可以让您在服务器端访问它?不是这样吗?
    • 您可以在服务器端使用 runat="server" 访问 div。
    • @phoenix - 当然,但不是您使用 jQuery 所做的更改。我是不是哪里错了?
    • 谢谢科比,你编辑的帖子澄清了很多。对 DOM 客户端的任何更改都不会被服务器端捕获,这是有道理的。我将尝试使用输入元素。
    猜你喜欢
    • 1970-01-01
    • 2013-05-04
    • 2013-03-02
    • 2013-05-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-11-07
    • 2023-03-15
    相关资源
    最近更新 更多