从代码背后调用JQuery - 任何其他解决方案

时间:2011-01-25 05:15:56

标签: jquery asp.net-mvc-2

我在MVC 2.我想从我的代码后面调用一个JQuery函数(即来自Controller)......我的JQuery函数是......

<script type="text/javascript">
$(function () {
    var a = document.getElementById("HidStatus").value;
    var b = parseInt(a);
    $("#progressbar").progressbar({
        value: b,
        max: 100
    });
});

<div id="progressbar" style="height: 8px; float: left; padding: .3%; margin-right: 274px;
                        margin-left: 160px; width: 350px;">
                    </div>
                    <div id="Div1" style="float: left; margin-left: 300px; margin-right: 100px; font-weight: bold">
                        <%= Html.Hidden("HidStatus", (double)ViewData["StatusBar"])%>
                        <%= Html.Label("Status - " + Convert.ToString(ViewData["StatusBar"] + "% Completed"))%>
                    </div>

我应该在我的控制器中调用它。我的控制器将是......

  [AcceptVerbs(HttpVerbs.Post)]
   public ActionResult ProvideDetails(FormCollection formCollection)
  {       
    //Here i should call the JQuery Function
     return PartialView("Details", empDetails);
  }

这是我的Ajax相关部分......

&lt;%AjaxOptions ajaxOption = new AjaxOptions();    ajaxOption.UpdateTargetId =“TargetId”;    使用(Ajax.BeginForm(“Provide”,“Emp”,new {},ajaxOption,new {id =“EmpForm”}))    { %GT; &lt;%using(Html.BeginForm(“Provide”,“Emp”))    {%GT;

&lt;%CurrentFormMode currentMode = new CurrentFormMode();     if(ViewData [“FormMode”]!= null)         currentMode =(CurrentFormMode)ViewData [“FormMode”]; %GT; &lt;%EmpDetails empDetails = new EmpDetails();   if(ViewData.ContainsKey(“EmpDetails”))       empDetails =(EmpDetails)ViewData [“EmpDetails”]; %GT;

&lt;%if(!string.IsNullOrEmpty(Html.CelloValidationMessage(“SuccessMessage”)))   {%&gt;

&lt;%}%&gt; &lt;%}%&gt;

如何做到这一点......

2 个答案:

答案 0 :(得分:2)

后面的代码在服务器上运行。运行时,页面尚未交付给用户,并且尚未在浏览器中呈现。

这意味着当您无法访问jQuery代码时,因为它仅在客户端上运行。

即使它可以运行,您也无法使用document.getElementById,因为它在网页中获取了一个尚未呈现的元素。

答案 1 :(得分:0)

如果我理解正确..用户正在执行某些操作,您希望在服务器上执行某些操作,然后更新进度条以指示用户发生了某些事情。

我认为你有几个选择。

使用jQuery帖子

您可以使用jQuery调用控制器操作,然后根据响应更新进度条。进度条更新回调函数将被置于“成功”(见下文)

$.ajax({
   type: 'POST',
   url: url,
   data: data,
   success: success
   dataType: dataType
});

请参阅jQuery API documentation

使用Ajax.BeginForm

您现在似乎正在使用PartialView。您可以使用Ajax表单,以便您可以提供在发布完成后调用的函数。 Ajax.BeginForm包含Success选项,您可以在其中提供Post成功完成时调用的函数。在该功能中,您可以更新进度条。

Here is an example如何使用Ajax.BeginForm

我希望这会给出一个如何实施正确解决方案的想法。