Member 12824529 Ответов: 1

Как я могу прочитать внутренний текст p-тега с runat="server" в коде позади?


Проблема, с которой я столкнулся, заключается в ASP.NET я назначаю данные p-tag innerText из JQuery, когда форма загружается, и это работает нормально. Но затем, в коде позади, когда я пытаюсь ссылаться на один и тот же внутренний текст одних и тех же p-тегов, все они входят в код позади в виде пустых строк, даже если данные отображаются нормально на форме. Я использую runat="сервер" в p-тегах.

Обратите также внимание, что только для тестирования я попытался жестко закодировать синусоидальный текст в p-tag pPlaceId следующим образом:
<p id="pPlaceId">This is a test.</p>

и если он жестко закодирован таким образом, то он успешно извлекается в коде позади.

Вот верхняя строка страницы HTML/JavaScript:
&ЛТ;%@ страницы язык="в C#" AutoEventWireup значение="истинной" отделенного кода="MyWebForm.aspx-файл.КС" наследует="MyAppName.MyWebForm" %>

Что я могу сделать, чтобы содержимое p-тега, назначенное и не жестко закодированное, было доступно в коде позади?

Что я уже пробовал:

У меня есть этот код JQuery, устанавливающий внутренний текст трех p-тегов в ASP.NET. Он отлично работает и заполняет три p-тега из localStorage при загрузке формы.

<script>
        $(document).ready(function () {
            document.getElementById("pPlaceId").innerText = localStorage.getItem("Map_PlaceId");
            document.getElementById("pPlaceName").innerText = localStorage.getItem("Map_PlaceName");
            document.getElementById("pPlaceAddress").innerText = localStorage.getItem("Map_PlaceVicinity");
        });
</script>


У меня есть контейнер div tag, который содержит тег формы, указывающий runat="server", и у меня есть в форме эти три p-тега, расположенные в элементах div row и div col:

<p id="pPlaceId" runat="server"></p>
<p id="pPlaceName" runat="server"></p>
<p id="pPlaceAddress" runat="server"></p>


Когда форма загружается, p-теги заполняются данными, как и ожидалось. Эта страница действует как страница подтверждения. Он отображает три части информации, которые были отправлены, и предоставляет две кнопки: Отправить и отменить.

Когда я нажимаю кнопку Отправить, он успешно выполняет обработчик щелчка в коде позади, никаких проблем там нет. Но в обработчике щелчка извлечение внутреннего текста p-тегов завершается неудачей. Каждый из них приходит в виде пустой строки.

с фоновым кодом

protected void btnSubmit_Click(object sender, EventArgs e)
{
    //Read the connection string from Web.Config file
    string ConnectionString = ConfigurationManager.ConnectionStrings["HCCS"].ConnectionString;
    oLL = new LocLogin();
    oLL.PersonID = Convert.ToInt32(this.Session["UserID"].ToString());
    try
    {
        oLL.PlaceID = pPlaceId.InnerText;
        oLL.LocName = pPlaceName.InnerText;
        oLL.LocAddress = pPlaceAddress.InnerText;

if(oLL.PlaceID != null)
{
    <Code to serialize data>
}
    }
    catch ( Exception ex)
    {
        string exception1 = ex.InnerException.ToString();
    }
        <Other code>
    }
<Other code>

}

1 Ответов

Рейтинг:
0

DerekT-P

Подумайте о том, как работают HTML-формы... когда вы отправляете форму, каким бы способом вы это ни делали, браузер будет публиковать только содержимое полей формы (плюс заголовки, конечно). Поэтому, если он не находится в поле формы, вы не можете опросить его на сервере. (Конечно, ASP.Net включает в себя несколько дополнительных полей формы, как скрытые поля, но они все еще являются полями формы.)
У вас есть несколько вариантов:

1. В клиентском коде отправки (например, Javascript) скопируйте внутренний HTML-код вашего приложения. <p> тег помещается в скрытое поле формы, поэтому он отправляется обратно на сервер, где вы можете его опросить
2. Использовать <input type=text> поле вместо а <p> тег; используйте стиль CSS, чтобы он выглядел и вел себя как <p> тег (возможно, Вам потребуется использовать <textarea> вместо этого) и сделать его только для чтения, чтобы пользователь не мог напрямую изменить его. Затем содержимое будет отправлено обратно как часть отправки формы, и вы сможете получить доступ к нему на стороне сервера.

Если вы когда-нибудь застряли на таких вещах, то используйте инструменты разработчика браузера, чтобы проверить код, чтобы увидеть, что происходит на самом деле. В этом случае, если вы посмотрите на сетевой трафик, вы увидите, что только поля формы отправляются обратно (слава Богу!), и вы могли бы разработать два приведенных выше предложения.


Member 12824529

Спасибо за ваш ответ. На самом деле у меня есть теги формы с указанным runat="server". Я столько всего перепробовала. Я попробовал текстовые поля (которые не отображают данные), p-теги и теги меток (каждый из которых отображает данные), а также добавил теги скрытых полей. Все они возвращают пустые строки в коде позади, несмотря на указание runat="server". Это крайне неприятно. Есть ли еще идеи о том, какое условие может быть неправильным, что может вызвать такого рода проблему? Спасибо.

DerekT-P

Кроме того, я все еще думаю, что вы не совсем понимаете веб-формы; не имеет значения добавление "runat=server" к тегу p или label; это не поля формы, поэтому браузер не будет отправлять их обратно на сервер!!

DerekT-P

Не видя вашего полного кода, нет. Существует множество проблем, которые могут вызвать проблемы (хотя лично я никогда не сталкивался с тем, чтобы поле формы было пустым на стороне сервера, когда этого не должно быть). То, что вы считаете несущественным и поэтому не показали нам, может быть причиной. Я так понимаю, вы использовали инструмент проверки сети Вашего браузера, чтобы проверить, что данные действительно отправляются обратно в виде данных??

Member 12824529

Дерек,
Я уточнил свой вопрос. Я уже отошел от использования тегов p, но они все еще упоминались в главном вопросе; но теперь я скопировал ASP.NET код формы для формы входа в систему и, даже не делая ничего с кодом позади, я даже не могу назначить текстовые строковые значения в готовой функции jQuery, которая будет отображаться в текстовых полях формы.
Новый вопрос находится на (https://www.codeproject.com/Questions/5274150/Why-do-text-assignments-to-textboxes-in-jquery-fai).