none
Asp.Net MVC 4 Actionlink e Javascript İle Route Değeri Yollamak RRS feed

  • Soru

  • Merhaba,

    Actionlink im var ve bu kontrol e javascript ile sistemin local zamanını yollamam gerekiyor. Fakat hiç bir yol ile yapamadım.

    @Html.ActionLink(item.Name, "Index", "Restaurants", New With { .CountyID = Model.CountyID,.CuisineID = item.CusineID, .LocalTime="Javascript değeri gelecek"} ,Nothing)

    şeklinde kullanıyorum.

    Normal a tag i ile yapamam çünkü route tanımlamasında localtime değerini url e eklettirmiyorum bu sebepten kullanamıyorum.

    Başka yol olarak a tag ıne tıklyınca javascript ile controller a verileri göndereyim dedim başarılı oldum veriler güzel şekilde gönderiliyor fakat async olarak gönderdiğinden dolayı sanırım sayfa eski url inde kalmaya devam ediyor, verileri gönderdiğim action ın view ine sayfa yönlenmiyor.

    Denediğim diğer yollar şu şekilde :

    $.ajax({
            method: "Post",
            url: "@Url.Action("Index","Restaurants")",
            dataType: "json",
            contentType: "application/json; charset=utf-8",
            data: JSON.stringify({ LocalTime: localtime, CountyID: countyID, CuisineID: cuisineID }),
            success: function (data) { alert('Oldu'); },
            failure: function (errMsg) { alert('Olmadı'); },
            async: false,
            processData: false
        });
    
     $.post("@Url.Action("Index","Restaurants")", { LocalTime: localtime, CountyID: countyID, CuisineID: cuisineID });

    2 gündür uğraşıyorum yardımlarınızı bekliyorum.

    5 Mayıs 2014 Pazartesi 07:53

Yanıtlar

  • Peki şöyle yapalım. Formu post ederken kullanıcının bilgisayarının tarih zaman bilgisini de post etmek istiyorsunuz dimi? hidden bir form field ekleyip post sırasında içini doldursanız işinizi görürmü acaba?

    @using(Html.BeginForm("Index", "Restaurants"))
    {
    
       .
       .
       .
       <input type="hidden" name="LocalTime" value="" />
       <input type="submit" value="Ara" />
    }
    
    
    @section Scripts{
    
       $(function(){
         $('form').post(function(){
            $('input[name=LocalTime]').val('<tarih/ saat buraya gelecek>');
         });
       });
    
    }


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    • Yanıt Olarak İşaretleyen Çağann 5 Mayıs 2014 Pazartesi 09:07
    5 Mayıs 2014 Pazartesi 08:48
    Moderatör

Tüm Yanıtlar

  • Aslında işin büyük kısmını halletmişsiniz. Benim önerim şu olur: 

    veriyi Index actionuna göndermeyin, yeni bir Action ekleyin ve bu action JSON döndürsün.

    $.getJSON('@Url.Action("YeniAction", "Restaurants")', JSON.stringfy({ .... })).success(function(d) {
       window.location = '@Url.Action("Index", "Restaurants")';
    });
    YeniAction'da işlemlerinizi yapın. Script success olduğunda Index'e gitsin.


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC



    5 Mayıs 2014 Pazartesi 08:02
    Moderatör
  • Tam olarak düşünce tarzınızı anlayamadım biraz açabilir misiniz lütfen ?

    Bende yapıdan bahsedeyim size.

     Function Index(Optional ByVal deliverytypes As DeliveryType = Nothing, Optional ByVal CuisineID As Integer = 0, Optional ByVal CountyID As Integer = 0, Optional ByVal LocalTime As DateTime = Nothing) As ActionResult

    şeklinde bir action var. Bu action sistemde restoran arama işlemlerinin sonucunu gösteriyor. 3 seçenek var 1- Adrese göre aramak, 2-Restoranın hizmet verdiği mutfak türüne göre aramak , 3- şuan yaptığım şehre göre aramak.

    Bu 3 işlemden hangisinin yapılacağı action a gelen değerlerden belirlenip repository tarafında gerekli işlemler yapılıp restaurant tipinde  index action una bir model yolluyorum. 

    Edit: http://cagantopcu.com/Cities linkinden bahsettiğim kısma bakabilirsiniz. Florida Miami Beach de veri var şuan
    • Düzenleyen Çağann 5 Mayıs 2014 Pazartesi 08:32
    5 Mayıs 2014 Pazartesi 08:30
  • Peki şöyle yapalım. Formu post ederken kullanıcının bilgisayarının tarih zaman bilgisini de post etmek istiyorsunuz dimi? hidden bir form field ekleyip post sırasında içini doldursanız işinizi görürmü acaba?

    @using(Html.BeginForm("Index", "Restaurants"))
    {
    
       .
       .
       .
       <input type="hidden" name="LocalTime" value="" />
       <input type="submit" value="Ara" />
    }
    
    
    @section Scripts{
    
       $(function(){
         $('form').post(function(){
            $('input[name=LocalTime]').val('<tarih/ saat buraya gelecek>');
         });
       });
    
    }


    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    • Yanıt Olarak İşaretleyen Çağann 5 Mayıs 2014 Pazartesi 09:07
    5 Mayıs 2014 Pazartesi 08:48
    Moderatör
  •   @Using (Html.BeginForm("Index", "Restaurants", New With {.CountyID = Model.CountyID, .CuisineID = item.CusineID},FormMethod.Post,New With{.onsubmit="localDate();"}))
                              
                                       @<input type="hidden" name="LocalTime"  value="" />
                                       @<input type="submit" value="@item.Name" />
                        End Using

    Js:

      function localDate() {
                
                var time = new Date();
                var localtime = time.toLocaleTimeString();
                $('input[name=LocalTime]').val(localtime);
            }

    Dediğiniz gibi bu şekilde çalıştı. Bende bu şekilde yapmayı düşünmüştüm  fakat  uygulamadım onlarca veri listelenebileceği için her birine form açmak bana pek optimal bir çözüm gelmemişti ama sanırım bundan başka çare yok.

    Yardımınız için teşekkürler

    5 Mayıs 2014 Pazartesi 09:07
  • Tek bir tane form yok mu? Ben öyle varsaymıştım

    www.mvcblog.org
    e-mail: onay[nokta]yalciner[at]hotmail[nokta]com
    MCC

    6 Mayıs 2014 Salı 06:14
    Moderatör