#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>
, что приведет к тому, что идентификатор останется точно таким, каким вы его установили. К этому есть предостережения, но в целом это должно соответствовать вашим потребностям.
Редактировать: как выясняется, им нужно, чтобы атрибут 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'>";