2

我有一个 html 元素:

<div id="myElement" class="someClass" onclick="setText(this.innerHtml)" runat="server">text</div>

我希望能够使用一些 jquery 在客户端更改此元素,如下所示:

function setText(text) {            
    $(".someClass").text(text);
}

- 或者 -

function setAttribute(text) {            
    $(".someClass").attr("myAttr",text);
}

一旦我这样做了,我想获取这个元素的新文本​​或新属性,然后存储服务器端的值。我应该注意,然后我使用 LinkBut​​ton 回发到服务器。正是在这个时候,当我查看元素时,默认文本仍然存在,或者我添加的新属性丢失了。

有人可以解释为什么该元素没有在服务器上更新以及我如何获得它吗?

4

3 回答 3

1

我相信您面临的问题是由于您使用的 html 元素的类型,即 div。如果您只是将 div 替换为“文本”类型的输入,它将按您的预期工作,允许您在回发时读取值。在表单提交/回发期间仅发送表单元素。

这方面的一个例子是基于 Web 的 WYSIWYG 文本编辑器的工作方式。您在 div 中键入和编辑,但在后台您所做的所有更改都存储在隐藏字段中。此隐藏字段用于将信息发布回服务器。

于 2012-04-24T17:52:55.037 回答
1

此方法可以工作,但它取决于您修改的元素类型和属性类型。还记得在每个请求上都会重新创建所有控件吗?为什么您可以在按钮事件中准确提取信息的唯一原因是,asp.net 从 LoadViewState 事件的请求(或视图状态)中提取数据,并用该数据替换控件的默认值。

如果您的 div 元素不是服务器端面板控件(这是将呈现 div 元素的 asp.net 控件),则它无法工作。如果您将其设为面板控件,我什至不能 100% 确定这是在 Page.Request 中传递的(尤其是属性)

我要做的是将您在 div 元素中修改的值复制到一个隐藏字段中,该字段可以轻松访问服务器端并在那里获取这个新的属性表单。

于 2012-04-24T17:50:21.587 回答
0

属性不会发布到服务器,就像根本一样(除了值,snerk)。只有项目的名称/值对是视图状态中包含的数据(假设您使用的是传统的 Web 表单)。

如果您想更改这样的项目,然后在服务器上访问它,则需要将此数据发布到查询字符串或作为键值对(然后需要在服务器对象上设置)。

否则,这是不可能的。

于 2012-04-24T17:50:00.717 回答