Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何使用AJAX动态创建文本框并将其添加到占位符中?_C#_Asp.net - Fatal编程技术网

C# 如何使用AJAX动态创建文本框并将其添加到占位符中?

C# 如何使用AJAX动态创建文本框并将其添加到占位符中?,c#,asp.net,C#,Asp.net,我正在尝试动态创建文本框。所以我通过AJAX函数来校准它 这是我的代码: Ajax函数 function ChangedAdults(noofAdults) { alert(noofAdults.value); $.ajax({ type: 'POST', dataType: 'json', url: "/FlightBooking.aspx/Adults", data: "{noOfAdults:'" + no

我正在尝试动态创建文本框。所以我通过AJAX函数来校准它

这是我的代码:

Ajax函数

function ChangedAdults(noofAdults) {
    alert(noofAdults.value);
    $.ajax({

        type: 'POST',
        dataType: 'json',
        url: "/FlightBooking.aspx/Adults",

        data: "{noOfAdults:'" + noofAdults.value +  "'}",
        contentType: "application/json; charset=utf-8",
        success: function (result) {
                     $("#AdultsList").html(result.d);
                 },
        error: function (xhr, ajaxOptions, thrownError) {
                   alert(xhr.status);
                   alert(thrownError);
               }
    });
}
代码隐藏

[WebMethod]
public static string Adults(int noOfAdults)
{
    FlightBooking obj = new FlightBooking();
    obj.CreateAdultsList(noOfAdults);          

    string test= "";
    return test.ToString();
}
private void CreateAdultsList(int noOfAdults)
{
    int n = noOfAdults;
    for (int i = 0; i < n; i++)
    {
        TextBox MyTextBox = new TextBox();                      
        MyTextBox.ID = "tb" + "" + i;    
        AdultsListPlaceholder.Controls.Add(MyTextBox); //error coming here
        AdultsListPlaceholder.Controls.Add(new LiteralControl("<br />"));
    }
}
protected int NumberOfControls
{
    get { return Convert.ToInt32(Session["noCon"]); }
    set { Session["noCon"] = value.ToString(); }
}

private void Page_Init(object sender, System.EventArgs e)
{
    if (!Page.IsPostBack)
        //Initiate the counter of dynamically added controls
        this.NumberOfControls = 0;
    else
        //Controls must be repeatedly be created on postback
        this.createControls();
}
private void Page_Load(object sender, System.EventArgs e)
{

}

protected void btnCreate_Click(object sender, EventArgs e)
{
    TextBox tbx = new TextBox();
    tbx.ID = "txtData"+NumberOfControls;
    NumberOfControls++;

    PlaceHolder1.Controls.Add(tbx);
}
protected void btnRead_Click(object sender, EventArgs e)
{
    int count = this.NumberOfControls;

    for (int i = 0; i < count; i++)
    {
        TextBox tx = (TextBox)PlaceHolder1.FindControl("txtData" + i.ToString());
        //Add the Controls to the container of your choice
        Label1.Text += tx.Text + ",";
    }
}

private void createControls()
{
    int count = this.NumberOfControls;

    for (int i = 0; i < count; i++)
    {
        TextBox tx = new TextBox();
        tx.ID = "txtData" + i.ToString();
        //Add the Controls to the container of your choice
        PlaceHolder1.Controls.Add(tx);
    }
}
[WebMethod]
公共静态字符串(int noofdefaults)
{
FlightBooking obj=新的FlightBooking();
对象创建成人列表(noOfAdults);
字符串测试=”;
返回测试.ToString();
}
私有void CreateAdultsList(int noofdefaults)
{
int n=无结果;
对于(int i=0;i”);
}
}
但我收到一个错误:

对象引用未设置为对象的实例


什么可能导致此问题?

AdultsListPlaceholder
为空,您需要重写其onload函数以创建此控件的子控件。 e、 g

protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
       CreateAdultsList(5);
    }

AdultsListPlaceholder
为空,您需要重写其onload函数以创建此控件的子控件。 e、 g

protected override void OnLoad(EventArgs e)
    {
        base.OnLoad(e);
       CreateAdultsList(5);
    }

在asp.net中,无法从jQuery或java脚本创建服务器控件。
虽然可以从jQuery调用web方法,但不能从web方法添加任何控件。
更多详细信息

创建
textbox
的想法之一是创建html
textbox

<input type="text" id="text1" ></input>

并通过jQueryAjax发布您的值以进行操作。

编辑1 另一种方法是在页面加载时创建所有控件(如果您知道最大数量)
最初隐藏它们
单击按钮时逐个显示
并在回发后在服务器上获取值

示例:

在asp.net中,无法从jQuery或java脚本创建服务器控件。
虽然可以从jQuery调用web方法,但不能从web方法添加任何控件。
更多详细信息

创建
textbox
的想法之一是创建html
textbox

<input type="text" id="text1" ></input>

并通过jQueryAjax发布您的值以进行操作。

编辑1 另一种方法是在页面加载时创建所有控件(如果您知道最大数量)
最初隐藏它们
单击按钮时逐个显示
并在回发后在服务器上获取值

示例:

您正在混合您的范例。您希望这段代码做什么?您可以根据AJAX调用呈现控件,但必须手动将处理后的HTML插入DOM

  • 使用AJAX调用服务器
  • 渲染服务器控件
  • 返回标记
  • 插入到DOM中

  • 或者,您可以通过完全回发或异步回发(例如,
    UpdatePanel
    )添加新控件以响应服务器事件。

    您正在混合您的范例。您希望这段代码做什么?您可以根据AJAX调用呈现控件,但必须手动将处理后的HTML插入DOM

  • 使用AJAX调用服务器
  • 渲染服务器控件
  • 返回标记
  • 插入到DOM中

  • 或者,您可以通过完全回发或异步回发(例如,
    UpdatePanel
    )添加新控件以响应服务器事件。

    您不能使用JQuery AJAX将控件动态添加到页面。请充分了解asp.net页面

    简而言之,这就是asp.net页面的工作方式

  • 浏览器向服务器发送请求。i、 e.
    http://localhost/test.aspx
  • 服务器为页面类创建一个对象。在这种情况下,类是
    Test
  • 对象呈现页面。这意味着它将
    test.aspx
    控件转换为浏览器可以理解的HTML
  • 服务器将呈现的HTML发送回浏览器并销毁该对象
  • 浏览器显示该页面
  • 因此,服务器每次收到页面请求时都会创建一个新对象

    但是,当使用AJAX调用
    WebMethods
    时,不会创建页面对象。这就是为什么
    Webmethods
    必须是静态的

    我可以看到您正在尝试自己创建一个对象,并向该对象添加动态控件。但此对象与浏览器中显示的内容无关。因此,向该对象添加控件不会更改浏览器中显示的任何内容。要做到这一点,你必须将整个页面发回。如果返回使用
    Response.Write
    创建的对象的渲染输出,则将返回整个页面的HTML版本。这与回发基本相同

    但是,可以使用UpdatePanel实现基于AJAX的动态控件渲染。下面是一种方法

    ASPX页面

    <form id="form1" runat="server">
        <asp:ScriptManager ID="ScriptManager1" runat="server"></asp:ScriptManager>
        <asp:UpdatePanel ID="UpdatePanel1" runat="server">
            <ContentTemplate>
                <asp:PlaceHolder ID="PlaceHolder1" runat="server"></asp:PlaceHolder>
                 <asp:Button ID="btnCreate" runat="server" Text="Create" OnClick="btnCreate_Click" />
            </ContentTemplate>            
        </asp:UpdatePanel>
        <asp:Button ID="btnRead" runat="server" Text="Read" OnClick="btnRead_Click" />
        <asp:Label ID="Label1" runat="server" Text="Label"></asp:Label>
    </form>
    
    
    
    代码隐藏

    [WebMethod]
    public static string Adults(int noOfAdults)
    {
        FlightBooking obj = new FlightBooking();
        obj.CreateAdultsList(noOfAdults);          
    
        string test= "";
        return test.ToString();
    }
    private void CreateAdultsList(int noOfAdults)
    {
        int n = noOfAdults;
        for (int i = 0; i < n; i++)
        {
            TextBox MyTextBox = new TextBox();                      
            MyTextBox.ID = "tb" + "" + i;    
            AdultsListPlaceholder.Controls.Add(MyTextBox); //error coming here
            AdultsListPlaceholder.Controls.Add(new LiteralControl("<br />"));
        }
    }
    
    protected int NumberOfControls
    {
        get { return Convert.ToInt32(Session["noCon"]); }
        set { Session["noCon"] = value.ToString(); }
    }
    
    private void Page_Init(object sender, System.EventArgs e)
    {
        if (!Page.IsPostBack)
            //Initiate the counter of dynamically added controls
            this.NumberOfControls = 0;
        else
            //Controls must be repeatedly be created on postback
            this.createControls();
    }
    private void Page_Load(object sender, System.EventArgs e)
    {
    
    }
    
    protected void btnCreate_Click(object sender, EventArgs e)
    {
        TextBox tbx = new TextBox();
        tbx.ID = "txtData"+NumberOfControls;
        NumberOfControls++;
    
        PlaceHolder1.Controls.Add(tbx);
    }
    protected void btnRead_Click(object sender, EventArgs e)
    {
        int count = this.NumberOfControls;
    
        for (int i = 0; i < count; i++)
        {
            TextBox tx = (TextBox)PlaceHolder1.FindControl("txtData" + i.ToString());
            //Add the Controls to the container of your choice
            Label1.Text += tx.Text + ",";
        }
    }
    
    private void createControls()
    {
        int count = this.NumberOfControls;
    
        for (int i = 0; i < count; i++)
        {
            TextBox tx = new TextBox();
            tx.ID = "txtData" + i.ToString();
            //Add the Controls to the container of your choice
            PlaceHolder1.Controls.Add(tx);
        }
    }
    
    受保护的int NumberOfControl
    {
    获取{return Convert.ToInt32(会话[“noCon”]);}
    set{Session[“noCon”]=value.ToString();}
    }
    私有无效页_Init(对象发送方,System.EventArgs e)
    {
    如果(!Page.IsPostBack)
    //启动动态添加控件的计数器
    此.NumberOfControls=0;
    其他的
    //必须在回发时重复创建控件
    这个.createControls();
    }
    私有无效页面加载(对象发送方,System.EventArgs e)
    {
    }
    受保护的无效BTN创建\单击(对象发送者,事件参数e)
    {
    TextBox tbx=新的TextBox();
    tbx.ID=“txtData”+NumberOfControls;
    NumberOfControls++;
    占位符1.控件.添加(tbx);
    }
    受保护的无效btnRead_单击(对象发送者,事件参数e)
    {
    int count=this.NumberOfControls;
    for(int i=0;i