2013-07-09 91 views
2

我有一個具有CreateCookie()方法的靜態類ItemInitializer。我希望在下拉列表中選中的項目發生更改時調用此方法。我如何在mvc中做到這一點?在某些.cs文件中調用Dropdownlistfor onchange事件的方法

目前,我與這個

在查看嘗試:

@Html.DropDownListFor(m => m.SelectedItem, Model.MyItemList, new { @id = "ddLForItems"}) 

在控制器的方法被調用這個樣子,

 myModel.SelectedItem = ItemInitializer.CreateCookie(); 

現在,onchange事件的DropDownListFor中,需要再次調用createCookie方法。

有了jQuery,我該如何調用CreateCookie方法。我有,

<script type = "text/javascript"> 
      $(function() { 
       $("#ddLForItems").change(function() { 
        var item = $(this).val(); 
        ...? 

        //TBD:Create a cookie with value myModel.SelectedItem 

       }); 
      }); 

</script> 

感謝

回答

5

您可以使用window.location.href重定向到您的應用的控制器動作,將調用此方法:

<script type = "text/javascript"> 
    $(function() { 
     $('#ddLForItems').change(function() { 
      var item = $(this).val(); 
      var url = '@Url.Action("SomeAction", "SomeController")?value=' + encodeURIComponent(item); 
      window.location.href = url; 
     }); 
    }); 
</script> 

將重定向到下列控制器動作並將選定的值傳遞給它:

public ActionResult SomeAction(string value) 
{ 
    ... you could call your method here 
} 

或者,如果您不想從當前頁面重定向,則可以使用AJAX呼叫:

<script type = "text/javascript"> 
    $(function() { 
     $('#ddLForItems').change(function() { 
      var item = $(this).val(); 
      $.ajax({ 
       url: '@Url.Action("SomeAction", "SomeController")', 
       type: 'POST', 
       data: { value: item }, 
       success: function(result) { 
        // the controller action was successfully called 
        // and it returned some result that you could work with here 
       } 
      }); 
     }); 
    }); 
</script> 
+0

達林非常感謝您。我所做的是使用GET而不是POST來套裝SomeAction。 – santa029