Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/306.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.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# 以编程方式创建表单标记不起作用_C#_Html_Asp.net - Fatal编程技术网

C# 以编程方式创建表单标记不起作用

C# 以编程方式创建表单标记不起作用,c#,html,asp.net,C#,Html,Asp.net,我有一个包含文字的简单网页,现在我想在代码隐藏中创建一个表单标记。 这是一个例子: if (IsPostBack) { Literal1.Text = "form submit"; } else { Literal1.Text = "<form id='myFrom' runat='server' action='default.aspx' method='POST'><input type='submit' value

我有一个包含文字的简单网页,现在我想在代码隐藏中创建一个表单标记。 这是一个例子:

if (IsPostBack)
{
    Literal1.Text = "form submit";
}
else
{
    Literal1.Text = "<form id='myFrom' runat='server' action='default.aspx'
                     method='POST'><input type='submit' value='click here'/></form>";
}
这段代码创建表单,但当我单击submit按钮时,它不会通过IsPostBack路径。为什么?


请注意,我需要将其创建并作为字符串发送,因为我想在ajax中使用它。

仅当POST请求源自ASP.NET的u doPostBack函数时,才会启用IsPostBack。有关如何使用JavaScript创建异步回发请求的信息,请参阅。

ASP.NET web表单已经是HTML表单,并且包含所有控件。您将表单嵌套在非合法HTML的表单中


我建议您用一个简单的按钮替换嵌套表单。在按钮的单击处理程序中,重定向到default.aspx。

正如John Wu所指出的,您不希望以这种方式实现代码。嵌套表单——虽然浏览器可以原谅它们——并不是一种好办法,尤其是对于ASP.NETWebForms。当然,我可以让您的代码正常工作,但是如果您需要对页面进行ajaxify处理,使其与WebForms回发模型一起工作,那么最好将UpdatePanel控件与ScriptManager控件结合使用

ASP.NETWebForms的前提是页面上只使用一个表单元素,因为它与回发模型相关,所以您需要在该约束范围内工作

下面是一些代码,演示如何使用UpdatePanel对Web表单进行ajaxify并利用回发功能:

…在.ASPX页面:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="NestedForm_Question.aspx.cs" Inherits="StackOverflowAspNetQuestionAnswers.NestedForm_Question" %>

<!DOCTYPE html>

<html xmlns="http://www.w3.org/1999/xhtml">
<head runat="server">
    <title></title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
        <asp:ScriptManager ID="ScriptManager" runat="server" />
        <asp:UpdatePanel runat="server">
            <ContentTemplate>
                 <asp:Literal ID="Literal1" runat="server" />
                 <asp:Button ID="SubmitButton" Text="Submit" runat="server" />
            </ContentTemplate>
        </asp:UpdatePanel>
    </div>
    </form>
</body>
</html>

您可以看到,在code behind类中,无论页面是否为ajaxified,单击按钮后设置文本控件值所需编写的代码都是相同的。

我已将代码更改为:

if (Context.Request.Form.HasKeys()) // instead of if(IsPostBack)
{
    Literal1.Text = "isPostBack";
}
else
{
    Literal1.Text = "<form id='myFrom' runat='server' action='default.aspx' method='POST'><input type='submit' name='submitbtn' value='click here'/></form>";
}
使用不同的例子,我没有发现任何例外。而且效果很好

你知道这个解决方案吗


请注意,通过这种方式,表单中至少有一个元素应该具有name属性。

您使用的是web表单还是MVC?当您从表单中删除action属性时会发生什么?是的,我使用的是webform。删除action attrib时没有区别。出于某些原因,我不想使用javascript。请注意,当我单击submit按钮时,页面刷新和表单提交就会发生。除了回发,还有其他方法可以理解吗?你可以在表单中添加一个隐藏的值,然后检查它是否存在。谢谢,但我不明白。请你再解释一下好吗?
if (Context.Request.Form.HasKeys()) // instead of if(IsPostBack)
{
    Literal1.Text = "isPostBack";
}
else
{
    Literal1.Text = "<form id='myFrom' runat='server' action='default.aspx' method='POST'><input type='submit' name='submitbtn' value='click here'/></form>";
}