2016-11-08 2 views
-1

У меня есть проблема с Asp.net MVC.MVC строит html-страницу, но не показывает ее

У меня есть страница Index.cshtml со следующим JavaScript

 $('#employeeTable tbody').on('dblclick', 'tr', function() { 
      var mitarbeiterId = table.row(this).data().Id;     
      $.post('@Url.Action("IndexCompletion")', { id: mitarbeiterId }); 
     }); 

Это просто делает меня идентификатор сотрудника и называет это ActionResult в моем контроллере

[HttpPost] 
    public ActionResult IndexCompletion(int id) 
    { 
     Mitarbeiter ma = new LeistungserfassungService.LeistungserfassungService().GetMitarbeiterById(id); 
     return View("IndexCompletion", new IndexCompletionViewModel{Mitarbeiter = ma}); 
    } 

Теперь я надеялся, что это покажет мне следующую страницу:

@model Leistungserfassung.Models.IndexCompletionViewModel 

    @{ 
     ViewBag.Title = "Completion"; 
     Layout = "~/Views/Shared/_Layout.cshtml"; 
    } 

    <div class="content"> 
     <h2>Completion</h2> 
     @Model.Mitarbeiter.Nachname 
    </div> 

Но что происходит сейчас, это b успешно удаляет страницу, как я могу видеть на вкладке «Сеть» в инструментах Google Chromes dev, но не перенаправляет ее. Также, когда я просто пытаюсь перейти к этому .cshtml-файлу, браузер говорит мне, что его невозможно найти.

Есть ли у кого-нибудь представление о том, что может быть проблемой? Я очень новичок в javascript, поэтому я благодарен за любой совет!

Заранее благодарим немецкие детали в моем коде.

+0

Весь смысл совершения вызова ajax состоит в том, чтобы оставаться на одной странице. Если вы хотите перейти на новую страницу, сделайте ** не ** использовать ajax. –

+0

Что было бы правильным способом получить почтовый вызов, как это сделано без использования AJAX? Я не знал, что $ .Post является сокращением для вызова ajax. – Bobscure

+0

Просто введите форму с кнопкой отправки (или несколькими формами в вашем случае) –

ответ

-1

Благодарим за помощь. Теперь, когда я понимаю, что $ .post создает вызов AJAX, я изменил свой код, чтобы создать форму на Doubleclick и отправить ее с моим идентификатором. (который является гораздо лучшим способом решить эту проблему)

 $('#employeeTable tbody').on('dblclick', 'tr', function() { 
      var mitarbeiterId = table.row(this).data().Id; 

      $('<form [email protected]("IndexCompletion") method="POST">' + 
        '<input type="hidden" name="id" value="' + mitarbeiterId + '">' + 
        '</form>').submit(); 
     }); 

Это прекрасно работает. В очередной раз благодарим за помощь.

0

Вы делаете асинхронный вызов async на сервер, используя JavaScript, это означает, что JavaScript должен перенаправить пользователя на другую страницу. Итак, чтобы это произошло, ваш метод post post должен возвращать ответ на JavaScript (скорее всего, JSON), который будет иметь ссылку перенаправления (ключ, значение) для последующей перенаправления.

+0

Я даже не знал, что $ .post() создает асинхронный вызов async. Я действительно надеялся, что могу просто передать объект напрямую. Я попробую ваше решение и опубликую его, если я его запустил! Спасибо – Bobscure

+0

Да, это короткая версия в jQuery. https://api.jquery.com/jquery.post/ серверу необходимо отправить сообщение об успешном завершении, которое ваш вызов ajax должен использовать в качестве обратной передачи. –

0

Надеюсь, это поможет вам.

var jsonObj = JSON.stringify({ 
       'id': mitarbeiterId 
      }); 

     $.ajax({ 
      url: '@Url.Action("IndexCompletion")', 
      type: "Post", 
      data: jsonObj, 
      async: false, 
      contentType: "application/json; charset=utf-8", 
      success: function (data) { 
       $("#divForReturnedViewFromController").html(msg); 
      }, 
     }); 
Смежные вопросы