2013-04-15 24 views
0

我在我的視圖中有一個列表框 - 當我從列表框中選擇一個項目時,我想調用一個控制器方法,對該值執行查找,然後用那些重新繪製頁面值。從jQuery執行一個控制器動作/ javascript

我的列表框代碼和我的jQuery代碼看起來是這樣的:

@using (Html.BeginForm()) 
{ 
    ... 
    <h3>Environments</h3> 
    @Html.ListBox("Environment", 
       new SelectList(Model.Environments), 
       new {@id="environmentsListbox"})   
    ... 
} 

<script> 
    $(document).ready(function() { 
     $('#environmentsListbox').click(function() { 
      var selected = $('#environmentsListbox').find(":selected").text(); 
      $.ajax({ 
       url: '@Url.Action("Index")', 
       data: { selectedEnvironment: selected },     
       success: function(data) { 
        ---- What to do here? 
       } 
      }); 
     }); 
    }); 
</script> 

控制器方法是這樣的:

public ActionResult Index(string selectedEnvironment) 
{ 
    // code omitted for brevity... 
    var frameworkConfig = GetInfo(selectedEnvironment); 

    return View(frameworkConfig); 
} 

呼叫工作正常,則選定的文本並使其控制器方法....但是我怎麼處理結果呢?我正在尋找一些可與@Html.Action("Index", selectedEnvironment)相媲美的東西,您可以在正常的MVC環境(非js)中使用它。我在data變量中返回了查看代碼,有沒有辦法使用該值重新加載頁面?

我在這篇文章中看到了答案:How to call URL action in MVC with javascript function?,與我需要做的非常接近,但是來自該控制器方法的結果視圖代碼被壓入包含的div標記中,而不是當前視圖。

回答

1

您可以使用jQuery的.html()函數。裏面你的成功回調,做這樣的事情:

<script> 
    $(document).ready(function() { 
     $('#environmentsListbox').click(function() { 
      var selected = $('#environmentsListbox').find(":selected").text(); 
      $.ajax({ 
       url: '@Url.Action("Index")', 
       data: { selectedEnvironment: selected },     
       success: function(data) { 
        $('#container').html(data); 
       } 
      }); 
     }); 
    }); 
</script> 

你要確保你是從你的控制器返回視圖有你需要(沒有任何佈局代碼等)的標記。直接在瀏覽器中訪問該網址以查看返回的內容。

+0

這是來自另一篇文章的答案。現在,整個佈局從我的控制器方法返回。所以如果我理解正確,最好是將我的主視圖代碼提取到另一個視圖中,並將其作爲我的控制器方法中的PartialView返回? – Rockdocta

+0

是的,如果該控制器操作旨在僅在此情況下使用,那將是一個合理的方法。如果你希望這個URL直接在瀏覽器中可用,你可以使用jQuery的.load()函數和使用「頁面片段」功能的另一種選擇,在那裏你可以從結果頁面中提取一個特定的容器。看看這裏:http://api.jquery.com/load/ – AlbertVo

相關問題