代码背后无法识别新控件

时间:2014-05-06 18:25:17

标签: c# asp.net visual-studio-2010 visual-studio-2013

我在ASPX页面中手动添加了几个字段,实际上是FormView。通过手动,我的意思是直接在Markup编辑器中键入代码。

现在,当我试图访问后面代码中的那些控件时,intellisense中没有任何内容出现。

我删除了designer.cs文件并右键单击了ASPX页面并选择了Convert to web application,但仍然没有。

设计器文件定义了FormView控件,但没有关于它的子控件。

我真的需要使用FindControl来实现这项功能吗?告诉我你是否需要发布一些代码,因为目前我可能对ASP.NET实际工作有点困惑(或者目前还没有)。

这是标记代码:

<%@ Page Language="C#" MasterPageFile="~/Site.Master" AutoEventWireup="True" CodeBehind="WebForm_PatientForm.aspx.cs" Inherits="WebAppWalkthrough.WebForm_PatientForm" Title="Employee form" %>
<%@ MasterType VirtualPath="~/Site.Master" %>
<asp:Content ContentPlaceHolderID="HeadContent" runat="server">
</asp:Content>
<asp:Content ContentPlaceHolderID="MainContent" runat="server">
    <asp:FormView ID="PatientForm" runat="server" DefaultMode="Edit">
        <EditItemTemplate>
            <table>
                <tr>
                    <td class="FormViewHeader">
                        Patient Name:
                    </td>
                    <td>
                        <asp:TextBox ID="PatientName" ReadOnly="true" runat="server" Text='<%# Bind("FullName") %>'></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Patient ID:
                    </td>
                    <td>
                        <asp:TextBox ID="PatientID" ReadOnly="true" runat="server" Text='<%# Bind("patientid") %>'></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Eligibility
                    </td>
                    <td>
                        <asp:DropDownList runat="server" ID="Eligibility" SelectedValue='<%# Bind("service_executive_eligibility") %>' >
                            <asp:ListItem Value="" Text="N/A" />
                            <asp:ListItem Value="True" Text="Yes" />
                            <asp:ListItem Value="False" Text="No" />
                        </asp:DropDownList>
                    </td>
                </tr>
            </table>
            <asp:LinkButton ID="LinkButton2" runat="server"  OnCommand="UpdatePatientInfo" Text="UpdateInfo" CommandArgument='<%# Bind("patientid") %>'>Update</asp:LinkButton>
            <asp:LinkButton ID="LinkButton3" runat="server" OnCommand="CancelEditPatient" CommandName="CancelUpdate" Text="CancelInfo">Cancel</asp:LinkButton>
        </EditItemTemplate>
        <InsertItemTemplate>
        <table>
                <tr>
                    <td class="FormViewHeader">
                        Employee First Name:
                    </td>
                    <td>
                        <asp:TextBox ID="FirstName" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Employee Last Name:
                    </td>
                    <td>
                        <asp:TextBox ID="LastName" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Email address:
                    </td>
                    <td>
                        <asp:TextBox ID="EmailAddress" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Work phone number:
                    </td>
                    <td>
                        <asp:TextBox ID="PhoneNumber" runat="server"></asp:TextBox>
                    </td>
                </tr>
                <tr>
                    <td class="FormViewHeader">
                        Eligibility
                    </td>
                    <td>
                        <asp:DropDownList runat="server" ID="Eligibility">
                            <asp:ListItem Value="True" Text="Yes" />
                            <asp:ListItem Value="False" Text="No" />
                        </asp:DropDownList>
                    </td>
                </tr>
            </table>
            <asp:LinkButton ID="LinkButton5" runat="server"  OnCommand="AddEmployee" Text="Add Employee">Add</asp:LinkButton>
        </InsertItemTemplate>
    </asp:FormView>
</asp:Content>

即使我在设计器文件中手动添加控件,我在运行时的代码中也会得到一个空引用错误(即使知识产权在运行时获取FirstName对象为空)。

编辑:我会尝试安装VS2010 SP1和this hotfix我找到并发布结果。

编辑2 :所以我安装了VS2010 SP1并没有解决问题。我无法安装此修补程序,因为我的系统是x64。

所以我放弃了VS2010并尝试使用VS2013,它仍然没有拾取标记控件。

即使Page.FindControl("ControlName")返回null。那个网页或VS2013的东西很烂......

感谢。

1 个答案:

答案 0 :(得分:0)

我之前遇到过与WebForms的Telerik UI组件类似的问题。我想访问在网格中的模板内定义的项目,但不幸的是,唯一的方法是挖掘该网格的子元素。那些内部元素也不存在于designer.cs文件中。 我不确定,但它可能是WebForms中嵌套元素的常见行为。