Сохранение того же имени скрытого поля ввода с помощью c#

#c# #asp.net #input

#c# #asp.net #ввод

Вопрос:

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

 <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», все будет хорошо в отношении имени, но тогда я не смогу заполнить поле ввода значениями! Есть ли способ заставить имя поля оставаться неизменным?

Комментарии:

1. вы могли бы заполнить их с помощью javascript

2. Извините, но я не хочу полагаться на JavaScript, когда у добрых 8% посетителей нашего сайта он отключен!

3. Некоторое время назад мне пришлось написать что-то подобное, и в итоге я просто поместил заполнитель на страницу и заполнил его непосредственно <input ...> элементами (без runat=server).

4. @Heinzi Извините, но не могли бы вы уточнить, я новичок в .net

Ответ №1:

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

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

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

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

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

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

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

 <input id="orderref" name="orderref" type="hidden" value='<%=RenderMessage() %>'/>
  

Комментарии:

1. Извините, я не понял второй бит. На данный момент я немного новичок!

2. Проверьте эту ссылку на встроенные блоки кода в ASP.NET .

3. Вы пропустили ответ. Напишите свой код. Строка RenderMessage() не будет отображаться при вводе значения, если вы не ответите. Напишите это

4. Нет, это неправда. <%= %> Синтаксис является сокращением для Response.write() .

5. @GuilhermeFerreira Вы редактируете мой ответ, чтобы взломать код — toxaq верен.

Ответ №2:

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

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

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

Комментарии:

1. Я добавил код, но я хочу сохранить его атрибут name , а не идентификатор.

2. @ComfortablyNumb Извините, пропустил это в исходном вопросе. ClientIDMode влияет только на атрибут id. Насколько я знаю, вы не можете программно задать имя runat=»server», поэтому вам может потребоваться один из других представленных вариантов, например, запись в заполнитель или удаление runat=»server» и запись значения в этот скрытый элемент управления во время выполнения с помощью <%=%>

3. Хотя я не использовал ваше решение. Информация будет полезной, поэтому спасибо за вашу помощь.

4. Работает только для атрибута id. Атрибутом Name нельзя управлять.

Ответ №3:

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

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

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

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

Для получения более подробной информации см. System.Web.UI.ClientScriptManager .Зарегистрируйте скрытое поле в MSDN

Ответ №4:

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

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

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