2016-08-08 1 views
0

Были попытки получить область управления профилями членов, работающую с ajax, поскольку каждый раздел страницы скрыт в div show hide.Ajax.BeginForm отправляет на контроллер поверхности и обновляет идентификатор цели с полной страницей вместо частичного представления

Я использовал ajax раньше в приложениях MVC, но раньше не использовал его с поверхностными контроллерами umbraco. Я не уверен, почему возвращение частичного представления в контроллере выводит всю страницу, а не только частичное представление, которое я ему даю.

Контроллер:

 [HttpPost] 
     [ActionName("MvcMemberEditProfileDetails")] 
     public ActionResult MvcMemberEditProfileDetails(MvcMemberEditProfileDetailsModel model) 
     { 

      var memberService = Services.MemberService; 
      var currentUser = Membership.GetUser(); 
      var member = memberService.GetByEmail(currentUser.Email); 

      bool result = false; 

      if (ModelState.IsValid) 
      { 

       ... 

      } 

      if (result) 
      { 
       ... 
      } 


      return PartialView("MvcMemberEditProfileDetails", model); 

     } 

Вид:

@model Umbraco714.Models.MvcMemberEditProfileDetailsModel 


@using (Ajax.BeginForm("MvcMemberEditProfileDetails", "MvcMember", new AjaxOptions() { HttpMethod = "POST", UpdateTargetId = "MvcMemberEditProfileDetails", InsertionMode = InsertionMode.Replace })) 
{ 

    if (Model.Result != null) 
    { 

     if (Model.Result == true) 
     { 

      <div id="result" class="alert alert-success"> 
       @Html.Raw(Model.ResultMessage) 
      </div> 

     } 
     else 
     { 

      <div id="result" class="alert alert-danger"> 
       @Html.Raw(Model.ResultMessage) 
      </div> 

     } 

    } 

    <div class="form-default"> 
     <div class="row"> 
      <div class="col-md-6"> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.FirstName) 
        @Html.TextBoxFor(m => m.FirstName) 
        @Html.ValidationMessageFor(m => m.FirstName) 
       </div> 
      </div> 
      <div class="col-md-6"> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.LastName) 
        @Html.TextBoxFor(m => m.LastName) 
        @Html.ValidationMessageFor(m => m.LastName) 
       </div> 
      </div> 
      <div class="col-md-6"> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.CompanyName) 
        @Html.TextBoxFor(m => m.CompanyName) 
        @Html.ValidationMessageFor(m => m.CompanyName) 
       </div> 
      </div> 
      <div class="col-md-6"> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.CompanyPosition) 
        @Html.TextBoxFor(m => m.CompanyPosition) 
        @Html.ValidationMessageFor(m => m.CompanyPosition) 
       </div> 
      </div> 
      <div class="col-xs-12"> 
       <div class="form-group"> 
        @Html.LabelFor(m => m.CompanyBio) 
        <span class="bs-tooltip" data-toggle="tooltip" data-placement="top" title="Max 1000 characters long"><i class="fa fa-info-circle" aria-hidden="true"></i></span> 

        @Html.TextAreaFor(m => m.CompanyBio, new { @rows = "4", @maxlength = "1000" }) 
        @Html.ValidationMessageFor(m => m.CompanyBio) 
       </div> 

       @TempData["Status"] 
       <div class="form-group nomargin"> 

        <div class="text-right"> 

         <button class="button" type="submit"><i class="fa fa-floppy-o" aria-hidden="true"></i> Update</button> 

        </div> 

       </div> 
      </div> 

     </div> 
    </div> 

} 

У меня есть все, что должно быть включено (насколько я знаю) задолго до формы, и нет никаких ошибок консоли.

<script src="/scripts/jquery.js"></script> 
    <script src="/scripts/bootstrap.min.js"></script> 
    <script src="/scripts/jquery-val.js"></script> 

    <script src="/scripts/jquery.unobtrusive-ajax.min.js"></script> 

Я также уверен, что UnobtrusiveJavaScriptEnabled установлена ​​истина в web.config, но я все еще получаю полную страницу визуализации, когда я отправляю форму.

Первоначально: When the page loads and the form shows

После: When the form is submitted and the correct partial view is returned but inside of an entire

Чувствуя довольно ошеломлен, что я провел более, что через пару часов, глядя на это, даже если он явно работает в каком-то образом.

Возможно ли это, чтобы это произошло? Я искал вокруг, но не мог найти темы с подобной проблемой, если только я не ошибался.

Просто ищете подталкивание в правильном направлении, если у кого-нибудь есть идеи?

+0

где находится ваш элемент html, в котором вы заменяете html? –

+0

Он находится внутри шаблона, который наследует Umbraco.Web.Mvc.UmbracoTemplatePage. Это действительно единственная особенность в div, помогает ли она в любом случае? –

+0

- это ваш вид формы ajax, загруженный в этот div? –

ответ

0

Umbraco может быть смешным с частичными. Попробуйте вернуть CurrentUmbracoPage() в контроллер.

Что касается сообщения, вы можете использовать TempData, поскольку он длится только для одного запроса, а не для модели.

+0

Возврат CurrentUmbracoPage() не будет работать, поскольку мне нужно только обновить небольшое количество страницы, чтобы сохранить активный активный div открытым. С каким опытом я чувствую, что это должен быть способ сделать это, и использование tempdata не было бы столь же практичным, как прохождение через модель и возвращение частичного результата и сохраненной/несохраненной информации. Можете ли вы вспомнить где-нибудь, что люди обсуждали частичные действия, играющие смешно в umbraco, или это только из вашего личного опыта? –

+0

Как ни странно, я только что вернул CurrentUmbracoPage() в любом случае и имел похожие результаты. У меня такое ощущение, что каким-то образом макет выводится с помощью частичного, что будет иметь смысл и вообще не имеет смысла, как я могу даже контролировать или удалять макет, если он добавляется. –

+0

Частицы, действующие странно, из личного опыта, к сожалению.Как вы говорите, это звучит так, как будто представление также отображается в фоновом режиме. Если это произойдет, я буду использовать JS для вызова UmbracoApiController через Ajax и вернуть объект, который будет содержать это сообщение. Извиняюсь за то, что неспособен решить эту проблему. – BezzyBloke

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