我在我的視圖中有一個列表框 - 當我從列表框中選擇一個項目時,我想調用一個控制器方法,對該值執行查找,然後用那些重新繪製頁面值。從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標記中,而不是當前視圖。
這是來自另一篇文章的答案。現在,整個佈局從我的控制器方法返回。所以如果我理解正確,最好是將我的主視圖代碼提取到另一個視圖中,並將其作爲我的控制器方法中的PartialView返回? – Rockdocta
是的,如果該控制器操作旨在僅在此情況下使用,那將是一個合理的方法。如果你希望這個URL直接在瀏覽器中可用,你可以使用jQuery的.load()函數和使用「頁面片段」功能的另一種選擇,在那裏你可以從結果頁面中提取一個特定的容器。看看這裏:http://api.jquery.com/load/ – AlbertVo