MVC -似乎不能使用AJAX帮助器发送到控制器动作



我在使用AJAX帮助器将模型发布到控制器动作时遇到了问题。控制器动作根本不会被击中。

代码:

视图:

<%@ Control Language="C#" Inherits="System.Web.Mvc.ViewUserControl<ServiceNumberModel>" %>
<div id="ServiceNumberPanel">
    <h1>
        Based on your location we offer different plans</h1>
    <% using (Ajax.BeginForm("AvailablePlans", "ServiceCheck", new AjaxOptions { UpdateTargetId = "AdslPlansPanel", HttpMethod = "Post" } ))
       { %>
            <%=Html.ValidationSummary(true)%>
            Your Phone Number:
            <%=Html.TextBoxFor(m => m.HomePhoneNumber)%><br />
            <%=Html.CheckBoxFor(m => m.BundleWithHomePhone)%>Bundle with Home Phone? <br/>
            <input id="CheckServiceAvailabilityButton" type="submit" value="Check"/>
    <% } %>
</div>

模型:

using System.ComponentModel;
using System.ComponentModel.DataAnnotations;
namespace ServiceCheck
{
    public class ServiceNumberModel
    {
        [Required(ErrorMessage = "Please enter your phone number.")]
        [RegularExpression(@"^[0]d{9}$", ErrorMessage = "Please enter your phone number, including the area code")]
        [DisplayName("Phone Number:")]
        public string HomePhoneNumber { get; set; }

        public bool BundleWithHomePhone { get; set; }
    }
}

控制器:

 [HttpPost]
        public ActionResult AvailablePlans(ServiceNumberModel serviceNumberModel)
        {
            if (serviceNumberModel.BundleWithHomePhone)
                return ReturnAvailableBundledPlans(serviceNumberModel);
            return View("Index");
        }

生成的HTML:

<div id="ServiceNumberPanel">
    <h1>
        Based on your location we offer different plans</h1>
    <form action="/ServiceCheck/AvailablePlans" data-ajax="true" data-ajax-method="Post" data-ajax-mode="replace" data-ajax-update="#AdslPlansPanel" id="form0" method="post">
            Your Phone Number:
            <input data-val="true" data-val-regex="Please enter your phone number, including the area code" data-val-regex-pattern="^[0]d{9}$" data-val-required="Please enter your phone number." id="HomePhoneNumber" name="HomePhoneNumber" type="text" value="" /><br />
            <input data-val="true" data-val-required="The BundleWithHomePhone field is required." id="BundleWithHomePhone" name="BundleWithHomePhone" type="checkbox" value="true" /><input name="BundleWithHomePhone" type="hidden" value="false" />Bundle with Home Phone? <br/>
            <input id="CheckServiceAvailabilityButton" type="submit" value="Check"/>
    </form>
</div>

行为:当我点击提交时,我得到"资源无法找到错误":

资源找不到。描述:HTTP 404。资源你正在查找(或其依赖项之一)可能已被删除,名称已更改,或暂时不可用。请检查查看下面的URL,并确保拼写正确。

请求的URL:/ServiceCheck

有趣的是,当我使用firebug查看源代码时,我看不到表单标签:
<div class="ExistingContent">
<h1>ServiceCheck</h1>
<div id="ServiceNumberPanel">
<div id="ServiceNumberPanel">
<h1> Based on your location we offer different plans</h1>
Your Phone Number:
<input id="HomePhoneNumber" type="text" value="" name="HomePhoneNumber" data-val-required="Please enter your phone number." data-val-regex-pattern="^[0]d{9}$" data-val-regex="Please enter your phone number, including the area code" data-val="true">
<br>
<input id="BundleWithHomePhone" type="checkbox" value="true" name="BundleWithHomePhone" data-val-required="The BundleWithHomePhone field is required." data-val="true">
<input type="hidden" value="false" name="BundleWithHomePhone">
Bundle with Home Phone?
<br>
<input id="CheckServiceAvailabilityButton" type="submit" value="Check">
</div>
<div id="Div1">
</div>
</div>

同样,如果我改变视图使用HTML帮助器,它会毫无问题地击中控制器:

<div id="Div1">
    <h1>
        Based on your location we offer different plans</h1>
    <% using (Html.BeginForm("AvailablePlans", "ServiceCheck"))
       { %>
            <%=Html.ValidationSummary(true)%>
            Your Phone Number:
            <%=Html.TextBoxFor(m => m.HomePhoneNumber)%><br />
            <%=Html.CheckBoxFor(m => m.BundleWithHomePhone)%>Bundle with Home Phone? <br/>
            <input id="Submit1" type="submit" value="Check"/>
    <% } %>
</div>

请帮助! !

我找到问题了。

在我使用的母版页面中,它被许多应用程序共享,有人添加了一个rouge表单:

<body>
    <form id="form1" runat="server">
    <uc1:header id="Header1" runat="server" />
    <div class="ExistingContent">
        <asp:contentplaceholder id="MainContent" runat="server" />
    </div>
    <uc2:footer id="Footer1" runat="server" />
    </form>
</body>

这意味着我试图从一个表单中提交一个表单,而框架默认是父窗体。

删除后,一切都开始正常运行

最新更新