2011-10-11 60 views
0

我有问题发布模型到控制器操作使用AJAX帮手。控制器行为根本没有受到打击。MVC-似乎无法发布到控制器操作使用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> 

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

The resource cannot be found. Description: HTTP 404. The resource you are looking for (or one of its dependencies) could have been removed, had its name changed, or is temporarily unavailable. Please review the following URL and make sure that it is spelled correctly.

Requested URL: /ServiceCheck

有趣的是,当我看着使用萤火虫的来源,我看不到表格标签:

<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> 

请帮助!

+0

您是否检查过您在Global.asax中的路由配置是否正确,以便路由/ DodoBroadbandWizardMvc/ServiceCheck/AvailablePlans? –

+0

感谢您的快速反应阿纳斯。当我使用HTML助手来支持AJAX帮助程序时,我可以发布到控制器操作而没有问题。 – Bart

+0

没有javascript错误? id = AdslPlansPanel的元素在哪里。还有一件事。您是否记得引用脚本MicrosoftAjax.debug.js和MicrosoftMvcAjax.debug.js – ingo

回答

0

我设法找到问题。

在母版页我用,这是跨多个应用程序共享,有人加了胭脂形式:

<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> 

这意味着我试图从表单中提交一个表单和该框架是默认给父母的。

一旦删除,一切都开始按预期工作。

相关问题