2012-01-24 19 views
8

MVC projesinde javascript ile URL eylemi oluşturmaya çalışıyorum. Sayfamda bu işlevi çağıran bir olayı yakalarım ancak bu URL'yi nasıl arayacağımı bilmiyorum.Javascript işleviyle MVC'de URL eylemi nasıl aranır?

Bana yardım eden var mı? :) Düzenlendi

function onDropDownChange(e) { 
    var url = '/Home/Index/' + e.value; 
    //What now...? 
} 

----------- -----------------------

Here' s my denetleyicisi eylemi:

public ActionResult Index(int? id) 
    { 
     var tmpToday = DateTime.Now; 
     var today = new DateTime(tmpToday.Year, tmpToday.Month, tmpToday.Day, 0, 0, 0); 

     if (id != null) 
     { 
      var num = id.GetValueOrDefault(); 
      var rentableUnits = new List<Unit>(); 
      _unitLogic.GetAllRentableUnitsByArea(num, rentableUnits); 

      var allAvailabilities = new ShowAvailability[rentableUnits.Count]; 

      for (int i = 0; i < rentableUnits.Count; i++) 
      { 
       var sTime = GetFirstDayOfMonth(today); 
       var eTime = GetLastDayOfMonth(today); 
       allAvailabilities[i] = new ShowAvailability(sTime, eTime.AddHours(23.0).AddMinutes(59.0), rentableUnits); 
       today = today.AddMonths(1); 
      } 

      var showAvailability = new List<ShowAvailability>(allAvailabilities); 

      return View(new HomeFormViewModel(showAvailability)); 
     } 
     else 
     { 
      var allAvailabilities = new ShowAvailability[12]; 

      for (int i = 0; i < 12; i++) 
      { 
       var sTime = GetFirstDayOfMonth(today); 
       var eTime = GetLastDayOfMonth(today); 
       allAvailabilities[i] = new ShowAvailability(sTime, eTime.AddHours(23.0).AddMinutes(59.0)); 
       today = today.AddMonths(1); 
      } 

      var showAvailability = new List<ShowAvailability>(allAvailabilities); 

      return View(new HomeFormViewModel(showAvailability)); 
     } 
    } 
# bu aslında bir Jilet View var javascript fonksiyonu ateşler benim DropDownList Telerik uzantısını kullanarak

Özür:

@(Html.Telerik().DropDownList() 
    .Name("DropDownList") 
    .Items(area => 
     { 
      area.Add().Text("Öll svæði").Value("0").Selected(true); 
      foreach (Unit a in Model.Areas) 
       { 
        area.Add().Text(a.Name).Value(a.UnitID.ToString()); 
       } 
     }) 
    .HtmlAttributes(new { style = "width: 130px;" }) 
    .ClientEvents(clev => clev.OnChange("onDropDownChange")) 
    ) 

Here's komut dosyası:

function onDropDownChange(e) { 
    var url = '/Home/Index/' + e.value; 
    $.ajax({ 
      type: "GET", 
      url: url, 
      data: {}, 
      dataType: "html" 
     }); 
} 
+0

Nasıl onDropDownChange' diyorsunuz? E e ne yazıyor? – ShankarSangoli

+0

ajax araması veya yeni sayfa yüklemesi mi arıyorsunuz? "javascript call new url" için googling'i denediniz mi? – scrappedcola

+1

Ne demek istiyorsun? Sayfayı yenisiyle yeniden yükleyin veya bu URL’den gelen verileri yenilemeden alın. – Mikhail

cevap

11

onDropDownChange işleyicinizde, URL'nize ulaşmak için ihtiyacınız olan herhangi bir veriyi ileterek jQuery AJAX araması yapın. success ve error seçenekleriyle başarılı ve başarısız çağrıları işleyebilirsiniz. success seçeneğinde, yapmanız gereken tüm işlemleri yapmak için data argümanında yer alan verileri kullanın. Bunların varsayılan olarak eşzamansız olduğunu unutmayın! jQuery'nin AJAX dokümantasyon

function onDropDownChange(e) { 
    var url = '/Home/Index/' + e.value; 
    $.ajax({ 
     url: url, 
     data: {}, //parameters go here in object literal form 
     type: 'GET', 
     datatype: 'json', 
     success: function(data) { alert('got here with data'); }, 
     error: function() { alert('something bad happened'); } 
    }); 
} 

here olduğunu.Gidiyorum

4

deneyin: istediğiniz yere sizi almalısınız

var url = '/Home/Index/' + e.value; 
window.location = window.location.host + url; 

.

+0

Yukarıda belirtilen yorumlara yanıt olarak - url = '/ ev/Dizin/'+ e.value; - e.value, URL'de görünmesini istemediğiniz hassas bilgiler içeriyorsa ne olur? Bunu nasıl gizleriz? – dawriter

11

size 2 yol Diyelim ki sadece aramak sadece

izleyin kullanması gereken bir eylem gidin isterseniz

ilk istemci tarafından bir eylem çağırmak vermek

window.location = "/Home/Index/" + youid 

Notlar: Eğer eylem bilinen ve al türünü işlemek gerekir

Bir Görünüm işlemek gerekiyorsa 0

İkinci

Eğer ajax

//this if you want get the html by get 
public ActionResult Foo() 
{ 
    return View(); //this return the render html 
} 

tarafından çağrılan Ve böyle adlandırılan istemci

$.get('your controller path', parameters to the controler , function callback) 
"Eğer jquery kullanarak olduğunuzu varsayarak" sağlayabilecekleri

veya

$.ajax({ 
    type: "GET", 
    url: "your controller path", 
    data: parameters to the controler 
    dataType: "html", 
    success: your function 
}); 

veya

$('your selector').load('your controller path') 

Güncelleme eyleme veri aktarmak için ajax denilen marka bu değişiklik ise

function onDropDownChange(e) { 
var url = '/Home/Index' 
$.ajax({ 
     type: "GET", 
     url: url, 
     data: { id = e.value}, <--sending the values to the server 
     dataType: "html", 
     success : function (data) { 
      //put your code here 
     } 
    }); 
} 

GÜNCELLEME Sen geri arama bunu yapamaz 2

'windows.location' isterseniz gidip görünüm oluşturursanız,senin görünümündeve yapılacak Bununla javascript istemci

$.ajax({ 
     type: "GET", 
     url: url, 
     data: { id = e.value}, <--sending the values to the server 
     dataType: "html", 
     success : function (data) { 
      $('div#theNewView').html(data); 
     } 
    }); 
} 

bazı yerde

<div id="theNewView"> </div> <---you're going to load the other view here 

yılında açılan var sen görünümünde bu

gibi bir şey Sanırım sorununuzu çözdüğünüzü düşünüyorum

+0

Cevabınız için teşekkür ederim Jorge. Bana verdiğin $ .jaax örneğini deniyorum. Kodumdan adım attım ve View() öğesinin yüklenmesi bitene kadar her şey iyi görünüyor, yani sayfa yenilenmiyor gibi görünüyor (belki de yanlış kullanıyorum). Bu yolla, -> url: '/ Home/Index /' + e.value veya bunun gibi - url parametresinin tam yolunu -> url: '/ Home/Index /' bu veri ile koymalıyım: e. değer – gardarvalur

+0

Lütfen sorunuzu güncelleyebilir ve kontrol cihazını ilişkilendirir misiniz? ve nasıl yönlendiriliyorsunuz? – Jorge

+0

Tekrar merhaba, evet mesajımı düzenledim. Umarım bu bir anlam ifade eder:/ – gardarvalur

İlgili konular