Надеюсь, у кого-то есть идея:
Короткая версия: В ASP.NET (C #), как я могу установить / обновить входное значение элемента ввода, который был созданво время выполнения (через C # или JS)?
Длинная версия:
Я использую сайт MasterPage в ASP.NET и динамически создаю некоторые элементы ввода на стороне сервера(С #). Теперь я хочу получить доступ к этим элементам, например, чтобы изменить значение после события Load или после отправки.
Итак, вот некоторые сведения:
- Я хочу закодировать сайт на C #
- Мне нужно динамически / во время выполнения создавать элементы ввода
- После загрузки (все элементы были созданы) или по крайней мере при отправке / публикации я хочу прочитать данные SQL и обновить все входные значения
- Я не хочу использовать javascript / jQuery
- Я не новичок в C #, но в ASP.NET много лет назад я много программировал на PHP (что, кстати, было намного проще): D)
Это то, что у меня есть, я значительно сократил код для лучшего чтения.
бэкэнд код HtmlHelper.cs :
public string CreateInput(string elementId)
{
string returnHtml = "<div class='many classes'><div class='more divs'><i class='icon classes'></i><input type='text' name='" + elementId + "' id='" + elementId + "' class='some classes' runat='server' /></div></div>";
}
интерфейс код users.ascx :
<form method="post" runat="server">
<%=html.CreateInput("txt_firstname") %>
<input type="submit" name="change_firstname" value="Change Input Value" runat="server" onserverclick="ChangeInputValue" />
</form>
бэкэнд код users.ascx.cs :
public HtmlHelper html = new HtmlHelper();
protected void ChangeInputValue(object sender, EventArgs e)
{
// this will give me a readonly error
Request.Form["txt_firstname"] = "Some new value...";
// this seems to work, but the changed value is not shown in the form
var propertyInfo = collection.GetType().GetProperty("IsReadOnly", BindingFlags.Instance | BindingFlags.NonPublic);
propertyInfo.SetValue(collection, false, new object[] { });
Request.Form["txt_firstname"] = "Some new value...";
}
Вот что возвращает функция CreateInput (например):
<div class='many classes'>
<div class='more divs'>
<i class='icon classes'></i>
<input type='text' name='txt_firstname' id='txt_firstname' class='some classes' runat="server" />
</div>
</div>
Я знаю, что естьдругие способы добавить динамический HTML-код, например:
<div <%=div1() %> >
<div <%=div2() %>>
<i <%=icon() %>></i>
<input id='txt_firstname' <%=input("txt_firstname") %>/>
</div>
</div>
Так что я могу использовать txt_firstname.Value = "some new value..."
Но Я хочу, чтобы весь блок был динамическим, и я хочу использовать HTML, потому что яхочу использовать HTML, может быть, в проекте PHP. Другая проблема: на некоторых страницах есть элементы ввода, которые создаются с помощью javascript. Таким образом, пользователь может добавить «строку» для сохранения нескольких значений (при каждом нажатии «добавить» я создаю новый элемент ввода). Это та же проблема, элемент input генерируется во время выполнения (через JS), а c # не знает этот элемент. В PHP я могу просто использовать значение $ _POST, независимо от того, является ли он необработанным html или сгенерированным с помощью PHP.
Итак: Как я могу установить / обновить входное значение динамически / сгенерированных во время выполнения входных данных? Может быть, мои мысли слишком сложны, но есть много сайтов с динамическими полями ввода (например, добавленные пользователем строки), должен быть способ обновить эти значения на стороне сервера, или я ошибаюсь?
И, пожалуйста, не ненавидите меня за генерацию HTML-кода в виде строки, я пытаюсь создать свою собственную «платформу», как все сегодня используют фреймворк, и эти фреймворки в основном делают то же самое, они генерируют код.