我有一个包含Literal的简单网页,现在我想在代码后面创建一个表单标签。 这是一个例子:
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>";
}
此代码创建表单,但是当我单击提交按钮时,它不会通过IsPostBack路径。的为什么吗
请注意,我需要创建它并将其作为字符串发送,因为我想在ajax中使用它。例如。
答案 0 :(得分:0)
仅当POST请求来自ASP.NET的__doPostBack()函数时,才会启用IsPostBack。有关如何使用JavaScript创建异步回发请求,请参阅How to use __doPostBack()。
答案 1 :(得分:0)
ASP.NET Web表单已经是HTML表单,包含所有控件。您正在将表单嵌套在不合法HTML的表单中。
我建议您使用简单的按钮替换嵌套表单。在按钮的单击处理程序中,重定向到default.aspx。
答案 2 :(得分:0)
如John Wu所示,您不希望以这种方式实现您的代码。嵌套表单 - 虽然浏览器原谅它们 - 不是那样,特别是ASP.Net WebForms。当然,我能够让你的代码工作,但如果你需要ajaxify你的页面,以便它与WebForms回发模型一起工作,那么使用UpdatePanel控件(与ScriptManager控件一起使用)会好得多。
ASP.Net WebForms基于页面上只使用一个Form元素,因为它与其回发模型有关,因此您需要在该约束内工作。
这里有一些代码来演示使用UpdatePanel来解析WebForm(并利用PostBack):
... .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>
...相关的代码隐藏类:
public partial class NestedForm_Question : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
SubmitButton.Click += SubmitButton_Click;
}
void SubmitButton_Click(object sender, EventArgs e)
{
Literal1.Text = "form submit";
}
}
你可以看到,在代码隐藏类中,单击Button后需要编写的用于设置文字控件值的代码与页面是否被ajaxified相同是相同的。
答案 3 :(得分:0)
我已将代码更改为:
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属性。