Понимание оценки ASP.NET () и связывает ()

Мое понимание того, почему ошибки не были бы повышены по умолчанию во времени выполнения, сводится к наследию желания создать языки программирования с подобным КИСЛОТЕ поведением. А именно, принцип, что что-либо, что Вы кодируете его, чтобы сделать (или не кодируют), это сделает (или не сделает). Если Вы не кодировали некоторый обработчик ошибок, то машина не "примет" на основании никакого обработчика ошибок, что Вы действительно хотите сделать смешную, склонную к катастрофическому отказу вещь, которую Вы говорите ему делать.

(ссылка ACID: http://en.wikipedia.org/wiki/ACID )

54
задан famousgarkin 19 December 2011 в 06:46
поделиться

1 ответ

Для элементов управления только для чтения они одинаковы. Для двухсторонней привязки данных с использованием источника данных, в который вы хотите обновить, вставить и т. Д. С декларативной привязкой данных, вам необходимо использовать Bind .

Представьте себе, например, GridView с ItemTemplate и EditItemTemplate . Если вы используете Bind или Eval в ItemTemplate , разницы не будет. Если вы используете Eval в EditItemTemplate , значение не сможет быть передано в метод Update источника DataSource , который grid привязан к.


ОБНОВЛЕНИЕ: Я придумал этот пример:

<%@ Page Language="C#" %>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title>Data binding demo</title>
</head>
<body>
    <form id="form1" runat="server">
        <asp:GridView 
            ID="grdTest" 
            runat="server" 
            AutoGenerateEditButton="true" 
            AutoGenerateColumns="false" 
            DataSourceID="mySource">
            <Columns>
                <asp:TemplateField>
                    <ItemTemplate>
                        <%# Eval("Name") %>
                    </ItemTemplate>
                    <EditItemTemplate>
                        <asp:TextBox 
                            ID="edtName" 
                            runat="server" 
                            Text='<%# Bind("Name") %>' 
                        />
                    </EditItemTemplate>
                </asp:TemplateField>
            </Columns>
        </asp:GridView>
    </form>

    <asp:ObjectDataSource 
        ID="mySource" 
        runat="server"
        SelectMethod="Select" 
        UpdateMethod="Update" 
        TypeName="MyCompany.CustomDataSource" />
</body>
</html>

А вот определение настраиваемого класса, который служит источником данных объекта:

public class CustomDataSource
{
    public class Model
    {
        public string Name { get; set; }
    }

    public IEnumerable<Model> Select()
    {
        return new[] 
        {
            new Model { Name = "some value" }
        };
    }

    public void Update(string Name)
    {
        // This method will be called if you used Bind for the TextBox
        // and you will be able to get the new name and update the
        // data source accordingly
    }

    public void Update()
    {
        // This method will be called if you used Eval for the TextBox
        // and you will not be able to get the new name that the user
        // entered
    }
}
78
ответ дан 7 November 2019 в 07:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: