Buduję aplikację internetową MVC3 i używam knockoutjs. W aplikacji są dwa widoki. SetUpNewCompany i ManageAccount. Aby założyć nową firmę, użytkownik najpierw wprowadza numer konta i przeszukuje kliknięcia. Jeśli numer konta już istnieje, użytkownik może kliknąć przycisk, aby przejść do widoku ManageAccount. W SetUpNewCompanyController przekierowuję za pomocą metody RedirectToAction. Jednak po wykonaniu akcji Index2 w ManageAccount widok nie jest wyświetlany. Jeśli wpiszesz pełny adres URL, wyświetli się widok.MVC RedirectToAction przez ajax jQuery call w knockoutjs nie działa
SetUpNewCompanyController.cs
[HttpPost]
public RedirectToRouteResult RedirectToManageAccount(string accountNumber)
{
return RedirectToAction("Index2", new RouteValueDictionary(new {controller=
"ManageAccount", companyId = "7e96b930-a786-44dd-8576-052ce608e38f" }));
}
To powyżej jest wywoływana przez funkcję poniżej, gdy kliknięciu przycisku
self.redirectToManageAccount = function() {
var accountNumber = "7e96b930-a786-44dd-8576-052ce608e38f";
$.ajax({
type: "POST",
url: "/SetUpNewCompany/RedirectToManageAccount",
data: { accountNumber: accountNumber },
success: function (data) {
},
error: function() {
}
});
}
ManageAccountController.cs
public ActionResult Index2(String companyId)
{
var viewModel = new Models.Index();
List<String> compList = new List<String>();
compList.Add("MyCompany");
List<String> usersList = new List<String>();
usersList.Add("User1");
viewModel.Users = usersList;
viewModel.Companies = compList;
viewModel.CompanyId = companyId;
viewModel.Role = "Role1";
return View("ManageAccount",viewModel);
}
URL, który jest generowany
http://localhost:53897/ManageAccount/Index2?companyId=7e96b930-a786-44dd-8576-
052ce608e38f
oknie konsoli w Firebug pokazuje
GET http://localhost:53897/ManageAccount/Index2?companyId=7e96b930-a786-44dd-8576-
052ce608e38f 200 OK and the spinner keeps spinng
Również, w jaki sposób mogę uzyskać adres URL poniżej zamiast jednego z kwerendy
http://localhost:53897/ManageAccount/Index2/7e96b930-a786-44dd-8576-052ce608e38f
Czy istnieje inny sposób na przekierowanie do ManageAccount/Index2 również dodałem trasę jak zasugerował ale ja wciąż mam? companyId = xxxxx w adresie URL – shresthaal
to zależy od konkretnego scenariusza naprawdę. Zaktualizowałem swoją odpowiedź jednym z możliwych uproszczeń procesu przekierowania. Jeśli chodzi o trasę: czy na pewno nie dodałeś go __after__ jakiejś bardziej ogólnej reguły? – twoflower
Zmieniłem identyfikator firmy na id i użyłem domyślnej trasy routingu, aby usunąć zapytanie – shresthaal