asp.net获取HTML控件在code背后 [英] asp.net get html controls in code behind

查看:171
本文介绍了asp.net获取HTML控件在code背后的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如果我改变使用JavaScript页​​面上的HTML,我怎么能访问这些变化,我的ASP.NET code后面?

我发现了一些DHTML拖放code网上(的 http://www.dhtmlgoodies.com/scripts/drag-drop-nodes/drag-drop-nodes-demo2.html ),但移动列表中的项目从一个控件到另一个后,我不知道如何访问,在背后这样我就可以保存列表项中的每个控件code分别控制。

我尝试使用HTML敏捷性包,但它似乎像我只能够访问HTML不变 - 这意味着所有的控制都是空的。

任何帮助/建议是AP preciated。或者有什么建议,以完成这一更好的方法,欢迎(jQuery的?Ajax工具包?)。

修改: 下面是一些code。我能来填充ASP Label控件(_saveContent),从JavaScript函数saveDragDropNodes,与ULID和我拖放相应的礼的控制。当点击但是保存按钮,我的Label控件不再包含任何文本...

 函数saveDragDropNodes(){
        VAR saveString =;
        VAR ULS = dragDropTopContainer.getElementsByTagName(UL);
        对于(VAR无= 1;无< uls.length;无++){//通过所有&LT循环; UL>
            VAR LIS = ULS [无] .getElementsByTagName(礼);
            为(变种NO2 = 0; NO 2&所述; lis.length;二氧化氮++){
                如果(saveString.length大于0)saveString = saveString +;;
                saveString = saveString + ULS [无] .ID +'|' + LIS [NO2] .ID;
            }
        }
        的document.getElementById(&其中;%= _ saveContent.ClientID%>中)。innerHTML的= saveString.replace(/; /克,';&所述峰; br>');
    }
  < D​​IV ID =dhtmlgoodies_dragDropContainer>
    < D​​IV ID =dhtmlgoodies_listOfItems>
        < D​​IV>
            &其中p为H.;
                可用项目< / P>
            < UL ID =allItems=服务器>
            < / UL>
        < / DIV>
    < / DIV>
    < D​​IV ID =dhtmlgoodies_mainContainer>
        < D​​IV>
            &其中p为H.;
                第1组和LT; / P>
            < UL ID =_ UL1>
            < / UL>
        < / DIV>
        < D​​IV>
            &其中p为H.;
                组2'; / P>
            < UL ID =_ UL2>
            < / UL>
        < / DIV>
    < / DIV>
    < ASP:标签ID =_ lSave=​​服务器前景色=红的EnableViewState =假/>
< / DIV>
< D​​IV ID =页脚>
&所述;跨度的onmouseover =saveDragDropNodes()>
    < ASP:按钮的ID =_ btnSave=​​服务器文本=保存组的OnClick =_ btnSave_OnClick/>< / SPAN>
< / DIV>
&所述;微升的id =dragContent>
< / UL>
< D​​IV ID =dragDropIndicator>< / DIV>
< ASP:标签ID =_ saveContent=服务器/>
 

code背后:

 保护小组的Page_Load(BYVAL发件人为对象,BYVAL E上EventArgs的)把手MyBase.Load
    如果不Page.IsPostBack然后
        GetItems()
    结束如果
结束小组
私人小组GetItems()
    昏暗DT作为数据表= DbHelper.GetDataTableForSP(GetListOptions)
    昏暗的指数作为整数= 1
    对于每个_row作为的DataRow在dt.Rows
        昏暗_li作为新HtmlGenericControl(礼)
        _li.ID = _row(CLASSID)
        _li.Attributes.Add(RUNAT,服务器)
        _li.InnerHtml =的String.Format({0}){1} {2},指数,_row(CLASSID),_row(ClassDescription1))
        allItems.Controls.Add(_li)
        指数+ = 1
    下一个
结束小组
私人小组存储组()

    昏暗str作为字符串= _saveContent.Text / *无文字在这里* /
    _lSave.Text =组救了!
    GetItems()
结束小组
 

解决方案

回发到服务器的值从表单字段的唯一内容。请参阅:表单提交

您有两种选择:

  1. 请使用Ajax从客户端的HTML传递到服务器。
  2. 使用一个隐藏的输入字段就在页面上岗前存储的HTML回来。

下面是后者的一个示例:

标记

 < D​​IV ID =内容>< / DIV>
< ASP:HiddenField ID =hiddenContentField=服务器/>
< ASP:按钮的ID =Button1的=服务器文本=后退的OnClick =的button1_Click的OnClientClick =storeContent(); />
 

剧本

 函数storeContent(){
    $('#<%= hiddenContentField.ClientID%>')。VAL($('#内容)HTML());
}
 

在内容元素所做的任何更改将被保存在隐藏输入元素,并派人来对发的服务器。

然后在code后面你可以访问HTML传上去像这样:

 保护无效的button1_Click(对象发件人,EventArgs的)
{
    字符串的HTML = hiddenContentField.Value;
}
 

希望这有助于。

If I alter the html on a page using JavaScript, how can I access those changes in my ASP.NET code behind?

I found some dhtml "drag and drop" code online (http://www.dhtmlgoodies.com/scripts/drag-drop-nodes/drag-drop-nodes-demo2.html), but after moving list items from one control to another, I don't know how to "access" each control in the code behind so I can save the list items in each control.

I tried using the HTML Agility pack, but it seems like I'm only able to access the unaltered html - meaning all the controls are empty.

Any help/suggestions are appreciated. Or any suggestions as to a better way of accomplishing this are welcome (jQuery? Ajax Toolkit?).

EDIT: Here's some code. I'm able to populate an ASP Label control (_saveContent), from the JavaScript function saveDragDropNodes, with the "ul" ID and the corresponding "li" controls that I've dragged and dropped. When clicking the save button however, my Label control no longer contains any Text...

function saveDragDropNodes() {
        var saveString = "";
        var uls = dragDropTopContainer.getElementsByTagName('UL');
        for (var no = 1; no < uls.length; no++) {   // LOoping through all <ul>
            var lis = uls[no].getElementsByTagName('LI');
            for (var no2 = 0; no2 < lis.length; no2++) {
                if (saveString.length > 0) saveString = saveString + ";";
                saveString = saveString + uls[no].id + '|' + lis[no2].id;
            }
        }
        document.getElementById("<%=_saveContent.ClientID %>").innerHTML = saveString.replace(/;/g, ';<br>');
    }
  <div id="dhtmlgoodies_dragDropContainer">
    <div id="dhtmlgoodies_listOfItems">
        <div>
            <p>
                Available Items</p>
            <ul id="allItems" runat="server">
            </ul>
        </div>
    </div>
    <div id="dhtmlgoodies_mainContainer">
        <div>
            <p>
                Group 1</p>
            <ul id="_ul1">
            </ul>
        </div>
        <div>
            <p>
                Group 2</p>
            <ul id="_ul2">
            </ul>
        </div>
    </div>
    <asp:Label ID="_lSave" runat="server" ForeColor="Red" EnableViewState="false" />
</div>
<div id="footer">
<span onmouseover="saveDragDropNodes()">
    <asp:Button ID="_btnSave" runat="server" Text="Save Groups" OnClick="_btnSave_OnClick" /></span>
</div>
<ul id="dragContent">
</ul>
<div id="dragDropIndicator"></div>
<asp:Label ID="_saveContent" runat="server" />

Code Behind:

Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles MyBase.Load
    If Not Page.IsPostBack Then
        GetItems()
    End If
End Sub
Private Sub GetItems()
    Dim dt As DataTable = DbHelper.GetDataTableForSP("GetListOptions")
    Dim index As Integer = 1
    For Each _row As DataRow In dt.Rows
        Dim _li As New HtmlGenericControl("li")
        _li.ID = _row("ClassId")
        _li.Attributes.Add("runat", "server")
        _li.InnerHtml = String.Format("{0}) {1} {2}", index, _row("ClassId"), _row("ClassDescription1"))
        allItems.Controls.Add(_li)
        index += 1
    Next
End Sub
Private Sub SaveGroups()

    Dim str As String = _saveContent.Text /*No text here */
    _lSave.Text = "Groups Saved!"
    GetItems()
End Sub

解决方案

The only content posted back to the server are values from form fields. See: Form submission.

You have two options:

  1. Make use of ajax to pass the HTML from the client to the server.
  2. Use a hidden input field to store the HTML just before the page posts back.

Here is an example of the latter:

Markup

<div id="content"></div>
<asp:HiddenField ID="hiddenContentField" runat="server" />
<asp:Button ID="button1" runat="server" Text="Post back" OnClick="button1_Click" OnClientClick="storeContent();" />

Script

function storeContent() {
    $('#<%= hiddenContentField.ClientID %>').val($('#content').html());
}

Any changes made in the content element will then be stored in the hidden input element and sent up to the server on postback.

Then in the code behind you can access the HTML passed up like so:

protected void button1_Click(object sender, EventArgs e)
{
    string html = hiddenContentField.Value;
}

Hope this helps.

这篇关于asp.net获取HTML控件在code背后的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆