Я пытаюсь реализовать простейшую возможную (так мне показалось) привязку привязки TextBox к свойству страницы, за исключением того, что привязка данных должна быть двухсторонней, поэтому вместо <%# Test %>
я использую <%# Bind("Test") %>
. (На самом деле, цель состоит в том, чтобы иметь единственный объект как свойство и привязываться к его свойствам, но начинать с чего-то простого.) Я тестирую его на этом простом коде:
TestForm.aspx
<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
<title></title>
</head>
<body>
<form id="form1" runat="server">
<div>
<asp:TextBox ID="TestTextBox" runat="server" Text='<%# Bind("Test") %>' />
</div>
</form>
</body>
</html>
TestForm.aspx.cs:
using System;
namespace WebApplication1
{
public partial class TestForm : System.Web.UI.Page
{
public string Test { get; set; }
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
Test = "Hello";
}
}
protected override void OnPreRender(EventArgs e)
{
base.OnPreRender(e);
DataBind();
}
}
}
Вызов DataBind() приводит к InvalidOperationException
: методы привязки данных, такие как Eval(), XPath() и Bind(), могут использоваться только в контексте управления базой данных.
Что не так с этим подходом?
К сожалению, Eval
и Bind
могут использоваться только в сочетании с контролем данных, такими как сетка. Это происходит потому, что они ожидают выполнения в контейнере именования, который имеет текущий элемент данных, например выбранную строку в сетке.
Таким образом, вы можете использовать этот синтаксис для привязки к текстовому полю, расположенному внутри шаблона строки сетки или тому подобное, но не к текстовому полю самостоятельно.
Вы должны использовать любой из
используя вышеописанную структуру, вы можете получить json-объект и привязать его непосредственно к любому элементу или атрибуту html.