2014-11-05 76 views
0

这有点奇怪,因为几个星期前这工作正常。下面是我..从部分视图使用Ajax.BeginForm,表单操作使用父控制器,而不是定义的控制器

我有了ajax的形式

@model m60_mbt.Models.Subscriber 

@{bool? subscribed = (bool?)Session["subscribed"];} 

@if (subscribed == true) 
{ 
    <div class="subscribe text-center animated fadeInUp"> 
    <h1> 
     Thank you for subscribing to our newsletter. 
    </h1> 

</div> 
} 

else 
{ 
<div class="row">  

     <h1><i class="fa fa-paper-plane"></i><span>Subscribe to stay in the loop</span></h1> 

     @using (Ajax.BeginForm("Create", "Subscriber", new AjaxOptions 
     { 
      HttpMethod = "POST", 
      InsertionMode = InsertionMode.Replace, 
      UpdateTargetId = "subscribe_target" 

     }, new { id = "Subscribe" })) 
     { 
     @Html.AntiForgeryToken() 

     @Html.ValidationSummary(true) 


      @Html.TextBoxFor(model => model.EmailAddress, new { @placeholder = "Your email address" }) 

      <input id="sub_but" type="submit" value="Subscribe" /> 
      <br /> 
      @Html.ValidationMessageFor(model => model.EmailAddress) 



     } 


    </div> 
} 

这是摆一个视图中的局部视图_subscribe。

<section class="subscribe text-center" id="subscribe_target"> 
    <h1><i class="fa fa-paper-plane"></i><span>Subscribe to stay in the loop</span></h1> 
    <div id="subscribe_form"> 
     @Html.Partial("_subscribe", new m60_mbt.Models.Subscriber()); 
    </div> 
</section> 

但当页面呈现形式的行动改变:

<form action="/Home/Create?Length=10" data-ajax="true" data-ajax-method="POST" data-ajax-mode="replace" data-ajax-update="#subscribe_target" id="Subscribe" method="post"> 

任何想法?

/* *编辑/ 这里是我的RouteConfig

public class RouteConfig 
{ 
    public static void RegisterRoutes(RouteCollection routes) 
    { 
     routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); 

     routes.MapRoute(
      name: "Default", 
      url: "{controller}/{action}/{id}", 
      defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional } 
     ); 
    } 
} 
+0

闻起来就像路由问题。您最近添加或更改了任何路线吗?你的RegisterRoutes代码是什么样的? – danludwig 2014-11-05 13:37:50

+0

路线没有变化。上面添加了代码。 – vbDoug 2014-11-05 13:41:52

回答

3

它看起来像您最近添加HTML属性new { id = "Subscribe" }。由于这种变化,控制器被视为路由价值。为了使其正常工作,您必须为控制器名称和ajax设置之间的路由值添加一个更多参数。因此,如果我将路由值分配为空,则您的代码看起来像这样。

@using (Ajax.BeginForm("Create", "Subscriber", null, new AjaxOptions 
    { 
     HttpMethod = "POST", 
     InsertionMode = InsertionMode.Replace, 
     UpdateTargetId = "subscribe_target" 

    }, new { id = "Subscribe" })) 
    { 
    @Html.AntiForgeryToken() 

    @Html.ValidationSummary(true) 


     @Html.TextBoxFor(model => model.EmailAddress, new { @placeholder = "Your email address" }) 

     <input id="sub_but" type="submit" value="Subscribe" /> 
     <br /> 
     @Html.ValidationMessageFor(model => model.EmailAddress) 



    } 
+0

谢谢..工作就像一个魅力.. – vbDoug 2014-11-05 14:49:20

相关问题