Javascript işlevli MVC Yönlendirme Sorunu

Javascript üzerinde çok fazla işlev kullandığım bir MVC Uygulamam var ve bu JavaScript çağrısı msa.js için ayrı bir dosyama (URL yardımcılarını kullanamıyorum) kullanıyorum. mvc View'da referans gösterdiğim klasör Scriptleri Şunun gibi: <script tipi = "text/javascript" src = "~/Scripts/msa.js"> </script> Başvuru iyi, ancak sorun JavaScript dosyasında: Ajax kullanarak sunucu yöntemlerine çok fazla çağrı yapıyorum, bu yüzden ajax çağrısında " url " özelliğini kullanmalıyım. Sorun şu ki, yerel bilgisayarımda iyi çalışıyor ve url şöyle bir yapıya sahip:

http://localhost:59655/WorkPanel/GetListOfPermissons

Ve doğru! Ancak sunucuya uygulamayı yüklemek istediğimde, sanal URL'yi kullanmak zorundayım.

http://10.10.25.161/MSA/WorkPanel/

Mvc sunucusundaki uygulamayı yürüttüğümde url'yi şöyle koymaya çalışın:

http://10.10.25.161/WorkPanel/GetListOfPermissons

Üstelik, MSA dizini url'den eksik olduğu için bu işlevi çalıştırmama sorunu da var: bu benim kod JavaScript örnek:

$.ajax({
    type: "POST",
    url:  '/WorkPanel/GetListOfPermissons',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",

Herhangi bir vücut bu sorunla karşı karşıya kaldı? Bunu nasıl çözdün? Şimdiden teşekkürler... Jose

2

6 cevap

Sanal dizini durduracağınız global bir değişkenle çalışmak iyi bir çözümdür:

var dir = "/WorkPanel"

Ve sen ajax çağrıları olur:

$.ajax({
    type: "POST",
    url:  dir + "/GetListOfPermissons',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
});

Diğer dizini kullanmak istediğinizde, sadece dosyayı değiştirin. Umarım yardımcı olur, teşekkürler!

0
katma
Sunucu ortamını kontrol etmek, ana bilgisayar ipini sınamak ve bunun gibi doğrulamak için de kullanabilirsiniz: if (window.location.host == "your.app.production.domain.com") dir = "/ MSA" else dir = "/ WorkPanel"
katma yazar netrevisanto, kaynak
Cevabınız için çok teşekkür ederim, ancak bu durumda sanal dizinde zor kod olmalı ve bu durumda WorkPanel bir dizin değil, bir denetleyici, dizin dinamik olmalı, muhtemelen ne olacağını bilmiyorum Rehber klasörünün adı olun ... Tekrar teşekkürler
katma yazar user4773439, kaynak

Sanal dizini durduracağınız global bir değişkenle çalışmak iyi bir çözümdür:

var dir = "/WorkPanel"

Ve sen ajax çağrıları olur:

$.ajax({
    type: "POST",
    url:  dir + "/GetListOfPermissons',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",
});

Diğer dizini kullanmak istediğinizde, sadece dosyayı değiştirin. Umarım yardımcı olur, teşekkürler!

0
katma
Sunucu ortamını kontrol etmek, ana bilgisayar ipini sınamak ve bunun gibi doğrulamak için de kullanabilirsiniz: if (window.location.host == "your.app.production.domain.com") dir = "/ MSA" else dir = "/ WorkPanel"
katma yazar netrevisanto, kaynak
Cevabınız için çok teşekkür ederim, ancak bu durumda sanal dizinde zor kod olmalı ve bu durumda WorkPanel bir dizin değil, bir denetleyici, dizin dinamik olmalı, muhtemelen ne olacağını bilmiyorum Rehber klasörünün adı olun ... Tekrar teşekkürler
katma yazar user4773439, kaynak

Temel URL'nizi _Layout.cshtml dosyasındaki global bir değişkene dönüştürmek için jilet yardımcısını veya URL’yi bu 'de olduğu gibi kullanacak bir sayfaya dönüştürmek için kullanabilirsiniz cevap.

<script type="text/javascript">
    var baseUrl = '@Url.Content("~")';
</script>

Ve JS dosyanızda bunu yapın:

$.ajax({
    type: "POST",
    url:  baseUrl + '/WorkPanel/GetListOfPermissons',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",

Sadece global değişken önceden bildirildikten sonra dosyanızı referans almayı unutmayın.

0
katma
Üzgünüm, bunun farkında değildim. @Netrevisanto çözümünü ancak window.location kullanarak kullanabilirsiniz
katma yazar rtbortolin, kaynak
Çok teşekkür ederim ama bu bir olasılık değil çünkü JavaScript fonksiyonu ayrı bir dosyada. Bunu yapamazsınız çünkü sunucu bunu bir dize gibi yorumluyor ... Teşekkürler
katma yazar user4773439, kaynak

Temel URL'nizi _Layout.cshtml dosyasındaki global bir değişkene dönüştürmek için jilet yardımcısını veya URL’yi bu 'de olduğu gibi kullanacak bir sayfaya dönüştürmek için kullanabilirsiniz cevap.

<script type="text/javascript">
    var baseUrl = '@Url.Content("~")';
</script>

Ve JS dosyanızda bunu yapın:

$.ajax({
    type: "POST",
    url:  baseUrl + '/WorkPanel/GetListOfPermissons',
    data: {},
    contentType: "application/json; charset=utf-8",
    dataType: "json",

Sadece global değişken önceden bildirildikten sonra dosyanızı referans almayı unutmayın.

0
katma
Üzgünüm, bunun farkında değildim. @Netrevisanto çözümünü ancak window.location kullanarak kullanabilirsiniz
katma yazar rtbortolin, kaynak
Çok teşekkür ederim ama bu bir olasılık değil çünkü JavaScript fonksiyonu ayrı bir dosyada. Bunu yapamazsınız çünkü sunucu bunu bir dize gibi yorumluyor ... Teşekkürler
katma yazar user4773439, kaynak

Yardım için her bedene teşekkür ediyorum, ancak bir özellik veya yöntem gibi bir çözüm bulmanın mümkün olduğunu sanmıyorum, bu yüzden kendi JavaScript işlevimi kodluyorum ve sorunu çözdüm, belki de en iyi çözüm değil ama en azından. t Kodları işlevlerde kullanın ... İşte işlevim belki birileri kullanabilir:

function GetUrlAjaxCall(action, controller) {
    var urlmedia = window.location.toString();
    var urlSplit = urlmedia.split('/');
    var url = "";
    if (urlSplit.length == 7)
        url = urlSplit[0].trim() + '//' + urlSplit[2].trim() + '/' + urlSplit[3].trim() + "/" + controller + "/" + action;
    else
        url = urlSplit[0].trim() + '//' + urlSplit[2].trim() + "/" + controller + "/" + action;
    return url;
}
0
katma

Yardım için her bedene teşekkür ediyorum, ancak bir özellik veya yöntem gibi bir çözüm bulmanın mümkün olduğunu sanmıyorum, bu yüzden kendi JavaScript işlevimi kodluyorum ve sorunu çözdüm, belki de en iyi çözüm değil ama en azından. t Kodları işlevlerde kullanın ... İşte işlevim belki birileri kullanabilir:

function GetUrlAjaxCall(action, controller) {
    var urlmedia = window.location.toString();
    var urlSplit = urlmedia.split('/');
    var url = "";
    if (urlSplit.length == 7)
        url = urlSplit[0].trim() + '//' + urlSplit[2].trim() + '/' + urlSplit[3].trim() + "/" + controller + "/" + action;
    else
        url = urlSplit[0].trim() + '//' + urlSplit[2].trim() + "/" + controller + "/" + action;
    return url;
}
0
katma