0

我的视图中有一个 ListBox - 当我从列表框中选择一个项目时,我想调用一个控制器方法,对该值执行查找,然后用这些值重新绘制页面。

我的列表框代码和我的 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 标记中,而不是当前视图。

4

1 回答 1

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>

您要确保从控制器返回的视图具有您需要的标记(没有任何布局代码等)。直接在浏览器中访问该 url 以查看它返回的内容。

于 2013-04-15T15:08:26.887 回答