Сохранение имени скрытого поля ввода с помощью c # - PullRequest
1 голос
/ 28 сентября 2011

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

<input id="orderref" name="orderref" type="hidden" runat="server"/>

Я добавил runat = "server", чтобы я мог динамически заполнять поля значениями.

Однако, конечно, во время выполнения имя поля ввода изменяется на:

<input name="ctl00$ContentPlaceHolder1$orderref" type="hidden" id="ContentPlaceHolder1_orderref" value="9" />

Я в ловушке 22. Если я удаляю runat = "server", все в порядке с именем, но я тогдане может заполнить поле ввода значениями!Есть ли способ заставить имя поля остаться прежним?

Ответы [ 4 ]

5 голосов
/ 28 сентября 2011

В зависимости от того, какую версию .NET вы используете, этот элемент управления отличается: в основном, до .NET4 вы можете только изменить префикс контейнера, реализовав свой собственный, но из .NET4 вы можете опустить префиксы контейнера , используя ClientIDMode.

В качестве альтернативы вы можете представить методы, скажем, на своей странице или главной странице, а затем вызвать их с помощью встроенных сценариев (<%=MyMethodReturningValue() %>), которые оцениваются во время рендеринга.

EDIT:

Чтобы немного проработать мое второе предложение, вы можете определить метод в своих страницах с выделением кода, который может быть выполнен встроенным образом с использованием блоков встроенного кода ; Ссылочная ссылка дает простые примеры этого, но методы не обязательно должны находиться в <script> блоках самой страницы (как я ранее уже упоминал), чтобы вы могли разделить свою логику, например:

Определите метод в коде вашей страницы:

public string RenderMessage()
{
    return "This need not be a hard-coded string!";
}

Запишите ваш элемент input, пропустив атрибут runat и добавив встроенный блок кода вместо того, где будет находиться значение (представьте это как заполнитель); этот блок кода будет вызывать указанный метод при предварительном рендеринге и по существу будет заменен возвращаемым значением:

<input id="orderref" name="orderref" type="hidden" value='<%=RenderMessage() %>'/>
3 голосов
/ 04 февраля 2013

Используйте следующий код:

Page.ClientScript.RegisterHiddenField("orderref", "9")

Это создает следующий скрытый ввод:

<input id="orderref" name="orderref" type="hidden" value="9" />

Подробнее см. System.Web.UI.ClientScriptManager.RegisterHiddenField на MSDN

3 голосов
/ 28 сентября 2011

Если вы используете ASP.NET 4.0, вы можете установить clientidmode="Static" на <input>, что приведет к тому, что идентификатор останется именно таким, как вы его установили.Есть предостережения по этому поводу, но в целом они должны работать для ваших нужд.

Документация по ClientIDMode

Редактировать: Как выяснилось, ониАтрибут name должен быть статическим, который ClientIDMode не контролирует и не может быть установлен программно в ASP.NET, он только контролирует атрибут id.

1 голос
/ 27 июля 2012

Я также боролся с этой проблемой и в конце концов нашел следующее решение: В разметке у меня есть следующее: <%=html %>

В коде у меня есть защищенная переменная: protected string html;

Затем я устанавливаю эту переменную следующим образом: html = "<input id='Express_Receipt_Email' type='hidden' value='" + sessionUser.EmailAddress + "' name='Express_Receipt_Email'>";

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...