2012-07-17 53 views
1

我想让Ajax.BeginForm调用一个函数,然后将它传递回序列中的最后一个选项卡,并从那里追加一个表。Ajax.BeginForm将Json数据传递回Jq UI选项卡

这将是基本的局部视图...

<script type="text/javascript"> 
    $(function() { 
     $("#searchPatient").tabs(); 
    }); 
    function switchToResultTab(data) { 
     $('a[href="#retTable"]').click(); 
     debugger; 
     $("#list").setGridParam({ 
      datatype: 'jsonstring', 
      datastr: data, 
      caption: 'Patient Search Result' 
     }).trigger("reloadGrid"); 
    }; 

    function failToTab(data) { 
     alert(""); 
     $("list").setGridParam({ 
     datatype:'jsonstring', 
     caption: 'Patient Search Result', 
     datastr:data 
     }).trigger("reloadGrid"); 
    }; 
</script> 
<div id="searchPatient" style="display:inline; float:inherit; width:100%"> 
    <ul> 
     <li><a href="#searchByMRN">Search By MRN</a></li> 
     <li><a href="#searchByDemographics">Search By Demo</a></li> 
     <li><a href="#retTable">Return Table</a></li> 
    </ul> 
    @Html.Partial("_SearchByMRN") 
    @Html.Partial("_SearchByDemographic") 
    @Html.Partial("_RetTable") 


</div> 

这将是怎样,我异步调用我的功能......一切正常了这一点......

@using(Ajax.BeginForm("SearchByDemographic", 
          "SearchPatients", 
          null, 
          new AjaxOptions{ 
           HttpMethod = "POST", 
           InsertionMode = InsertionMode.Replace, 
           LoadingElementId = Url.Content("~/Images/ajax-loader.gif"), 
           UpdateTargetId = "retTable", 
           OnSuccess = "switchToResultTab(data)", 
           OnFailure = "FailToTab" 
          }, 
           new{ 
            id = "formSearchByMRN" 
           } 
          ) 
      ) 

在完成之后,我期望调用onSuccess中列出的switchToResultTab函数......部分脚本中已经有调用.tabs()jquery方法的脚本。唯一的问题是我从来没有进入这个功能?我从来没有打过调试器,所以这是告诉我,有什么事情正在发生,我从来没有称这个功能... 我做错了什么?

UPDATE:我调试这个事情,我试图弄清楚发生了什么 好了,所以我一直在调试这个东西,它似乎认为我的jQuery函数永远不会被激活。看来我的表单正在做一个实际的提交而不是ajax提交。这是我迄今可以推测的。我完全不知道为什么会发生这种情况。 继续 * UPDATE:尝试不同的THINGS *一对夫妇 次要更新...与Ajax.BeginForm挣扎后,我回到我的老尝试和真正的Html.BeginForm方法,我写我自己的jQuery的功能。 ..

$('#searchByDemographics').submit(function() {//#formSearchByMRN, 
    if ($(this).valid()) { 
     $.ajax({ 
      url: this.action, 
      type: this.method, 
      data: $(this).serialize(), 
      success: function (result) { 
       $('#retTable').html(result); 
       switchToResultTab(result); 
      } 
     }); 
    } 
    return false; 
}); 

在这两种情况下,它似乎在某种程度上或其他我的jQuery库是由当时我走到这一步不再加载...它有一个confict某种方式与jQuery的图书馆之一我已经加载...也许事实上,我有jqgrid加载在最后一个选项卡导致某种冲突?

回答

1

在你AjaxOptions,尝试更换:

OnSuccess = "switchToResultTab(data)" 

有:

OnSuccess = "switchToResultTab" 

另外,还要确保你已经包括了jquery.unobtrusive-ajax.js脚本到你的页面,否则,Ajax.BeginForm会像一个正常的形式:

<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script> 
+0

Microsoft JScript运行时错误:Obj ect不支持属性或方法'有效' Microsoft JScript运行时错误:'jQuery'未定义 解释我得到的第一个异常,我用Html.BegingForm切换了Ajax.begin表单,然后我写了一个jQuery函数,然后我试过你的例子,那是我得到的第二个异常,我不明白的是显然我的jquery没有被加载。 :沮丧: – SoftwareSavant 2012-07-18 11:59:24

+0

生病更新我原来的帖子,以反映我的尝试。 – SoftwareSavant 2012-07-18 11:59:48

+0

您是否包含'jquery.validate.js'和'jquery.validate.unobtrusive.js'脚本?如果您正在进行不引人注目的客户端验证,那么这些都是必需的。我想你只包括第二个,但忘了包含'jquery.validate.js'。 – 2012-07-18 12:00:28