部分视图内容不会重新加载

时间:2015-12-23 13:48:38

标签: c# ajax asp.net-mvc asp.net-mvc-partialview

我有一个带按钮的视图,当单击此按钮时,ajax函数调用控制器方法ApplicationAndUse,它应该将列表传递给我视图中包含的部分视图。部分视图内容应该刷新,但这不起作用,我的部分仍然是空的。 我的代码:

主要观点:

@model List<String>


<div class="row">
<div class="col-md-2">
    @foreach (var item in Model)
    {
        <div id="univers-@item" class="btn btn-info">@item</div><br />
    }
</div>
<div class="col-md-10">
    @Html.Partial("_ApplicationAndUsePartial", null, new ViewDataDictionary())
</div>
</div> 
@section scripts
{
<script type="text/javascript">

    $(function () {

        $('[id^=univers]').click(function () {

            var selectedButton = $(this).attr('id');
            var selectedUniverse = selectedButton.substring(selectedButton.indexOf('-') + 1, selectedButton.lenght);


            $.ajax({
                url: "http://" + window.location.host + "/UseAndNeed/ApplicationAndUse",
                type: "POST",
                data: { idUniverse: selectedUniverse },
                dataType: "json",
            });
        });
    });
</script>
}

部分观点:

@model List<int>

@if (Model!= null) { 
foreach (var item in Model)
{
    <div id="ApplicationUse-@item" class="btn btn-default">@item</div><br />
}
}

控制器功能:

[OutputCache(Duration = 0)]
    public ActionResult ApplicationAndUse(String idUniverse)
    {
         List<int> items = new List<int>();
         items.Add(1);
         items.Add(2);
        return PartialView("_ApplicationAndUsePartial", (object)items);
    }

我错过了什么?

1 个答案:

答案 0 :(得分:3)

为我们要显示部分视图内容的div提供唯一ID。

<div id="myPartial" class="col-md-10">
    @Html.Partial("_ApplicationAndUsePartial", null, new ViewDataDictionary())
</div>

在ajax方法的success处理程序中,使用来自ajax调用的响应更新此div的innerHTML。此外,在进行ajax调用时,您无需传递指定dataType值。

var myUrl= "http://" + window.location.host + "/UseAndNeed/ApplicationAndUse";

$.ajax({  type: "POST",
          url : myUrl,
          data: { idUniverse: selectedUniverse },
          success:function(result){
              $("myPartial").html(result);
          }
       });

始终您应该使用Url.ActionUrl.RouteUrl html辅助方法来构建操作方法的URL。无论您当前的页面/路径如何,它都会正确构建网址。

var myUrl= "@Url.Action("ApplicationAndUse","UseAndNeeed")";

如果您的js代码位于剃刀视图中,则此方法有效。但是如果你的代码在一个单独的javascript文件中,你可以使用上面的帮助器方法在你的剃刀视图中构建url,并将它保存在外部js文件代码可以访问的变量中。这样做时务必使用javascript命名空间,以避免可能出现的全局javascript变量问题。

@section Scripts
{
 <script>
    var myApp = myApp || {};
    myApp.Urls = myApp.Urls || {};
    myApp.Urls.baseUrl = '@Url.Content("~")';       
 </script>
 <script src="~/Scripts/PageSpecificExternalJsFile.js"></script>

}

PageSpecificExternalJsFile.js文件中,您可以像。

一样阅读
var myUrl= myApp.Urls.baseUrl+"UseAndNeed/ApplicationAndUse";
$("#myPartial").load(myUrl+'?idUniverse=someValue');