2013-02-18 2 views
2

Я относительно новичок в веб-разработке и совершенно новый для веб-форм ASP.NET. У меня есть следующий пользовательский элемент управления:получить внутренний html из редактируемого div в asp.net

CSS:

div.textareaDiv { 
    -moz-appearance: textfield-multiline; 
    -webkit-appearance: textarea; 
    border: 1px solid gray; 
    font: medium -moz-fixed; 
    font: -webkit-small-control; 
    height: 200px; 
    padding: 2px; 
    resize:both; 
    width: 400px; 
    word-wrap: break-word; 
    word-break:normal; 
} 

Сценарий:

function CatchEnterKey(e) { 
     if (e.keyCode == 13) { 
     e.stopPropagation(); 
     return false; 
    } 
    return true; 
} 

Markup:

<div id='HtmlTextField' style="height:200px!important;" class="textareaDiv"  onkeypress="CatchEnterKey(event);" contenteditable="true" unselectable="off" runat="server"></div>; 

И следующий код фоновым функция вызывается, когда Кнопка «отправить» на родительской странице нажата:

public string GetHtml() 
     { 
      Page.ClientScript.RegisterClientScriptBlock(this.GetType(), "gethtml", "alert($('.textareaDiv').html());", true); 
       return null; 
     } 

Идея состоит в том, чтобы вернуть внутренний html div через выполнение скрипта, но в настоящее время я просто хочу выяснить, почему я получаю пустое предупреждение. Разве что внутренний html div действительно очищается от обратной передачи, и мне нужно думать о другом решении, или я делаю что-то неправильно?

Заранее спасибо

римской

ответ

1

Смотрите эту post on SO. Вместо этого замените свой пример на использование RegisterStartupScript. Проблема заключается в том, что RegisterClientScriptBlock регистрируется до того, как элементы отображаются на экране, поэтому элемент даже не отображается при запуске этого кода. RegisterStartupScript отображает после всех элементов.

Кроме того, JQuery также поддерживает отсрочку запуска скрипта до тех пор, пока все не загрузится. Если вы обернуть код:

$(document).ready(function() { /* alert code here */ }); 

Или стенографии:

$(function() { /* alert code here */ }); 

Это задерживает выполнение до документа готовы. Это еще одна альтернатива.

+0

Спасибо, это действительно задержка выполнения выполнения, но есть еще одна проблема: теперь, когда текст в div был отредактирован, и я хочу обновленное значение, вместо этого получаю исходное. Думаю, мне нужно сохранить его в какой-то скрытый элемент управления или viewstate гораздо раньше: на каком-то определенном событии ... – user2082616

+0

Вы говорите об обратной передаче на сервер? –

+0

@ user2082616 Я бы подумал, что вам нужно было сохранить его на скрытый элемент управления * позже *, то есть прямо перед обратной передачей. –