ASP.NET (C #) Как установить / обновить входное значение динамически / во время выполнения сгенерированных входов? - PullRequest
0 голосов
/ 17 октября 2019

Надеюсь, у кого-то есть идея:

Короткая версия: В 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-кода в виде строки, я пытаюсь создать свою собственную «платформу», как все сегодня используют фреймворк, и эти фреймворки в основном делают то же самое, они генерируют код.

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