Ajax.BeginForm - 需要两种形式才能使它工作

时间:2014-01-21 07:24:50

标签: asp.net-mvc asp.net-ajax

我的问题很简单。

此代码工作正常,与预期一样。提交表单会导致div更新。但是,如果我删除第一个(空)表单,它将不再起作用。它需要在那里运作良好。为什么?这对我来说真的很烦人。因为我无法解决它。

<% using (Ajax.BeginForm(new AjaxOptions { })) { }%>

<% using(Ajax.BeginForm("UpdateForm", new AjaxOptions{UpdateTargetId="textEntered"})) { %>
 <%= Html.TextBox("textBox1")%>  
 <input type="submit" value="Submit"/><br />
 <span id="textEntered">Nothing Entered</span>
<% } %>
希望你能帮助我。干杯

编辑:添加完整代码

视图:

<head runat="server">
<title>Index</title>
  <script src="../../Scripts/MicrosoftAjax.js" type="text/javascript"></script>
  <script src="../../Scripts/MicrosoftMvcAjax.js" type="text/javascript"></script>
</head>
<body>
 <form runat="server" id="form1">

 <p>
  Page Rendered: <%= DateTime.Now.ToLongTimeString() %>
 </p>
 <span id="status">No Status</span>
 <br />   
 <%= Ajax.ActionLink("Update Status", "GetStatus", new AjaxOptions{UpdateTargetId="status" }) %>
 <br /><br />

 <% using (Ajax.BeginForm(new AjaxOptions { })) { }%>

 <% using(Ajax.BeginForm("UpdateForm", new AjaxOptions{UpdateTargetId="textEntered"})){ %>
  <%= Html.TextBox("textBox1")%>  
  <input type="submit" value="Submit"/><br />
  <span id="textEntered">Nothing Entered</span>
 <% } %>

</form>
</body>

控制器:

public class HomeController : Controller
{

public ActionResult Index()
{
 return View();
}

public string GetStatus()
{
 return "Status OK at " + DateTime.Now.ToLongTimeString();
}

public string UpdateForm(string textBox1)
{
 if (textBox1 != "")
 {
    return "You entered: \"" + textBox1.ToString() + "\" at " + DateTime.Now.ToLongTimeString();
 }
 return String.Empty;
 }
}

但请相信我,代码应该可以正常工作,它是由教程完成的。

EDIT2:okey,现在根据评论工作。但是,如果不能以另一种形式出现形式,为什么它适用于3种形式?:)有一种“主”形式,以及我的ajax形式。不起作用。如果在“主”形式是两个ajax形式,它的工作原理。咦?

1 个答案:

答案 0 :(得分:0)

尝试从代码中删除<form runat="server" id="form1"></form>。 HTML中不允许使用嵌套表单。

我无法在本地重现相同的问题,因此为了调查原因,请查看HTML源代码,使用Fiddler调试您的HTTP流量,在不同的浏览器中尝试使用它等。 我怀疑你的情况下的浏览器可能会将第二种形式识别为第一种形式的结束标记,这就是第三种形式的原因。您可以看到,如果您浏览浏览器创建的DOM元素树。