在ASP.NET代码隐藏中访问客户端修改后的HTML

时间:2014-11-11 04:33:52

标签: javascript c# html asp.net html5-draggable

aspx页面的代码隐藏是否有办法访问修改后的html?

例如,我有一个空的runat ="服务器"在" queue.aspx"

上看起来像这样的无序列表
<ul runat="server" id="sortableQueue" class="sortable" >
</ul>

然后我使用codebehind&#34; queue.aspx.cs&#34;

填充它
HtmlGenericControl li_item1 = new HtmlGenericControl("li");
li_item1.InnerText = "Shot Name - 1";
li_item1.Attributes["style"] = "cursor: move";
li_item1.Attributes["data-shotid"] = "1";
sortableQueue.Controls.Add(li_item1);

HtmlGenericControl li_item2 = new HtmlGenericControl("li");
li_item2.InnerText = "Shot Name - 2";
li_item2.Attributes["style"] = "cursor: move";
li_item2.Attributes["data-shotid"] = "2";
sortableQueue.Controls.Add(li_item2);

接下来,允许用户使用html5sortable对这些列表项重新排序。这样可以正常工作,并修改页面的HTML。

然后我尝试在&#34; queue.aspx.cs&#34;中读取这样更改的html,以便将它们保存到数据库中。

protected void btnSaveQueue_Click(object sender, EventArgs e)
{
    int count = sortableQueue.Controls.Count;
    for (int p = 1; p <= count - 1; p++)
    {
        HtmlGenericControl li_item = (HtmlGenericControl)sortableQueue.Controls[p];
        Response.Write(li_item.Attributes["data-shotid"]); //for testing purposes
    }
}

不幸的是,这个函数读取html5重新排序之前的html。例如,如果我交换了第1项和第2项的位置,我希望该函数能够写出&#34; 21&#34;。

相反,它会写出&#34; 12&#34;好像什么都没有被修改。

无论如何,问题的详细描述,但我愿意接受任何关于如何使我的方法工作的建议,或者实现可重新排序的拖放列表的相同功能的替代方法。

1 个答案:

答案 0 :(得分:1)

ASP.net&amp; Web表单仍然使用HTTP的基础知识,通常通过回发到服务器的表单。信息传递回服务器的唯一方法是在HTML表单输入元素或查询字符串中。

即使ASP.net公开了服务器端元素/控件,要将信息持久化回服务器,您还需要使用表单元素。 ASP.net利用<input type="hidden" />来持久化视图状态等。使用隐藏字段存储有关已重新排序列表的新索引的信息。使用html5sortables sortuptate事件将所述信息放入隐藏字段。