2014-11-05 1 views
0

Это немного странно, потому что пару недель назад это работало нормально. Вот что у меня есть ..Использование Ajax.BeginForm с частичного представления, действие формы использует родительский контроллер, а не определенный контроллер

У меня есть частичный вид _subscribe, который имеет форму АЯКС

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

Это помещается внутри вида.

<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

+0

Изменения в маршрут отсутствуют. Добавлен код выше. – vbDoug

ответ

3

Похоже, что вы недавно добавили HTML атрибут new { id = "Subscribe" }. Из-за этого изменения контроллер рассматривается как значение маршрута. Чтобы заставить его работать, вы должны добавить еще один параметр для значений маршрута между именем контроллера и настройкой ajax. Таким образом, ваш код выглядит так, если я задаю значение маршрута как null.

@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

Смежные вопросы