Как с помощью C # прочитать значение TD? - PullRequest
2 голосов
/ 30 марта 2012

Это наша страница сервера CMIS (Информационная система управления компьютером): (Примечание: сервер CMIS, который я не могу изменить, страница генерируется автоматически.)

<form method="POST" action="bl_view_invoice_controler.jsp" name="fm1" onSubmit="return checkValid()">
    //please attention the form name is 'fm1'
    <TABLE id=AutoNumber7 style="BORDER-COLLAPSE: collapse" 
        borderColor=#111111 cellSpacing=0 cellPadding=2 width="100%" 
        border=0>
        <TBODY>
            <TR>
                <TD width="40%"><input type="text" class="underline1" name="ivcd_item" size="15"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_unitprice" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_quantity" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_totalfc" size="8"></TD>
                <TD width="40%"><input type="text" class="underline1" name="ivcd_item" size="15"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_unitprice" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_quantity" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_totalfc" size="8"></TD>
            </TR>
            <TR>
                <TD width="40%"><input type="text" class="underline1" name="ivcd_item" size="15"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_unitprice" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_quantity" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_totalfc" size="8"></TD>
                <TD width="40%"><input type="text" class="underline1" name="ivcd_item" size="15"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_unitprice" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_quantity" size="8"></TD>
                <TD width="20%"><input type="text" class="underline1" name="ivcd_totalfc" size="8"></TD>
            </TR>
        </TBODY>
    </TABLE>
    <script language="JavaScript"> //this script store the value of the table
        fm1.ivcd_item['0'].value="B747-400";
        fm1.ivcd_totalfc['0'].value="500.00";
        fm1.ivcd_unitprice['0'].value="1";
        fm1.ivcd_quantity['0'].value="";

        fm1.ivcd_item['2'].value="B747-800";
        fm1.ivcd_totalfc['2'].value="250.00";
        fm1.ivcd_unitprice['2'].value="";
        fm1.ivcd_quantity['2'].value="";
    </script>           
</FORM>

У меня вопрос, как использовать C #получить значение таблицы, например «B747-400» или «B747-800»?

Ответы [ 7 ]

1 голос
/ 30 марта 2012

Используйте HTML Agility Pack , чтобы очистить HTML-код и получить ваше значение.

0 голосов
/ 30 марта 2012

Если я не ошибаюсь, то, что вы ищете, это ..

создать проект WinForms .. и WebBrowser в форму из инструментов

поместить следующий код в метод события Form_Load.

webBrowser1.Navigate("<your URL here>");

поместите следующий код в событие DocumentCompleted браузера

        HtmlElementCollection coll = webBrowser1.Document.
                   GetElementsByTagName("input").GetElementsByName("ivcd_item");
        string ivcd_item;
        foreach( HtmlElement el in coll)
        {
            //condition here to check of the index of the element and 
            //other stuffs required
            ivcd_item= el.GetAttribute("value");
        }
0 голосов
/ 30 марта 2012

Я думаю, что вы можете сделать это ..

1, поместите скрытый текст, например

<input type="hidden" id="tableInfo" runat="server" />

2, поставить кнопку, как

<input type = "button" id = "btnSample" onclick = "getTableInfo();" />

3, реализуйте функцию getTableInfo с помощью javascript, например

function getTableInfo()
{
     var tb=$("tableName");
     var data=[];
     for(var i=1;i<tb.rows.length;i++) {
        data.push(tb.rows[i].cells[0].firstChild.value);
        data.push(tb.rows[i].cells[1].firstChild.value);
        data.push(tb.rows[i].cells[2].firstChild.value);
     }
     $("tableInfo").value=data.join("`");

     __doPostBack("Button1" , ""); // Call you server side function here
}

4, тогда в функции на стороне вашего Button1 вы можете получить информацию о таблице из скрытого текстового поля

0 голосов
/ 30 марта 2012

Я бы также сказал «использовать HtmlAgilityPack », если бы не было сценариев, которые должны быть выполнены после загрузки страницы.Итак, Мое решение: сначала загрузите страницу, используя WebClient , а затем проанализируйте ее, используя компонент WebBrowser.

WebBrowser web = new WebBrowser();
web.DocumentCompleted += (sender, args) =>
    {
        var result = web.Document
            .GetElementsByTagName("input")
            .Cast<HtmlElement>()
            .Where(e => e.GetAttribute("name") == "ivcd_item")
            .Select(e=>e.GetAttribute("value"))
            .ToArray();
    };
web.DocumentText = htmlstring;
0 голосов
/ 30 марта 2012

использование:

<input type="text" class="underline1" name="ivcd_item" id="ivcd_item" runat="server" size="15">

затем в коде:

ivcd_item.Value;

Вы также можете использовать ASP.Net TextBox вместо типа ввода текста здесь.

Редактировать:

Я вижу, вы не можете редактировать страницу, и я предполагаю, что у вас есть доступ к ней только с помощью обычных HTTP-запросов? Затем вы можете использовать очистку, чтобы получить значения со страницы. Я думаю, что это единственный способ. Вы можете сделать веб-запрос, чтобы получить HTML и посмотреть на поля в форме, как в: http://crazorsharp.blogspot.com/2009/06/c-html-screen-scraping-part-1.html

Вы также можете использовать JQuery для этого, получить содержимое страницы, используя запрос get, и очистить HTML. Смотрите эту ссылку для получения дополнительной информации: http://james.padolsey.com/javascript/cross-domain-requests-with-jquery/

0 голосов
/ 30 марта 2012

Как объяснено выше, дайте ID элементу и установите runat = "server" для доступа к любому элементу в коде C # Выше код является примером для вас и правильно написано.

<td runat="server" id="myTd">Value</td>
0 голосов
/ 30 марта 2012

Если вы создадите сервер td runat = и зададите ему идентификатор, вы можете ссылаться на него по этому идентификатору в коде C #, стоящем за

<td runat="server" id="myTd">Value</td>
...