从控制器访问视图中的div

时间:2014-01-03 09:32:03

标签: asp.net ajax runatserver

在我的布局页面中,我有这个HTML:

 <div id="ajax-loading" class="global-loading-image" runat="server">
        <img src="/content/travelbill/img/small-loading-image.gif"/>
 </div>

哪个是加载符号。我想让它显示我的代码何时开展业务。 我在Stackoverflow上读过其他线程,如果你使用runat="server",你应该能够访问控制器中的div。像这样:

   ajax-loading.Visible = true;
        EditTravelBillViewModel model = this.travelBillService.GetTravelBill(travelBillId);
        model.StageOfProcess = (int)TravelBillStageOfProcessEnum.APPROVED;
        this.travelBillService.Update(model, true);
        ajax-loading.Visible = false;
        return RedirectToAction("GetTravelBillsPerCompany");

但是我得到的错误是当前上下文中不存在加载和ajax。我做错了什么?

1 个答案:

答案 0 :(得分:2)

那是在旧的ASP.NET页面中。在ASP MVC中,您没有ViewStateisPostBackrunat="server",您可以使用ViewBagViewData将变量从控制器传递到视图,例如:

<强>控制器:

ViewBag.Name = "My Name";
ViewData["Name"]  = "My Name";

查看:

@ViewBag.Name
@ViewData["Name"]

我认为你不需要这样做。您可以执行一项操作来执行完成所需的任务,并使用JavaScript通过AJAX请求该操作。然后,您可以使用JavaScript显示并隐藏加载:

function LoadAjax(containerId, url, params){
  //Set loading in container
  $(containerId).html('<img src="loading.gif" alt="loading"/>');
  //Do the request
  $.ajax({
    type: 'POST',
    dataType: "html",
    url: url,
    data: params,
    success: function(data){
     // show response inside container (removes loading)
     $(containerId).html(data);
    },
    error: function( jqXHR, textStatus, errorThrown){
      // show error inside container (removes loading)
      $(containerId).html(textStatus);
    }
  });
}

页面加载时会显示加载图片。您将需要Jquery来使用我的代码。希望它有所帮助。