Ajax返回部分视图丢失了Javascript

时间:2012-11-05 05:35:25

标签: javascript jquery ajax partial-views

我有一个主视图,其主布局包含所有javascripts,即jQuery DatePicker控件等。

在这个主视图中,我使用包含局部视图的Ajax.BeginForm(.....)。在我的控制器中,如果验证失败,则返回该部分视图。 (也已经设置了Ajax中的UpdateTargetId,该部分的Id包含该部分视图。)

我的错误项目符号正确显示。但是我发现我之后似乎松了javascript。例如,我的日历/日期选择器停止工作,它是一个普通的输入框。

可能是什么原因?

非常感谢!!

以下是代码:

我的主视图包含一个Ajax表单。里面有2个局部视图。第二个有datepicker输入。

@using (Ajax.BeginForm("ActionXXX", "ControllerYYY", new AjaxOptions
{
    HttpMethod = "POST",
    UpdateTargetId = "main"        
}))
{
     <section id="main" class="....." data-section="....." data-step="">  

            @Html.Partial("ValidationSummary") 

            @Html.Partial("SharedPartialView", Model, new ViewDataDictionary {.....})          

     </section> 

}

JS包含在主文件中。 (主视图有此布局)

<script type="text/javascript">   

    $('input.date').watermark('dd/mm/yyyy');

    $('input.date').datepicker({
        dateFormat: "dd/mm/yy",
        maxDate: 0, 
        onClose: function () { $(this).valid(); } 
    });    

    $('input.time').watermark('hh:mm');
    $('input.time').timeEntry();

</script>

控制器只是:当验证失败时,返回部分视图(“SharedPartialView”)

if (Request.IsAjaxRequest())
    return PartialView("SharedPartialView", ciShareModel); //model

这些日期选择器和水印jquery在页面初始加载时起作用....

1 个答案:

答案 0 :(得分:3)

加载局部视图后,您是否再次运行javascript? - 脚本块仅在页面加载时运行,因此主页面中的脚本仅在加载主页时运行。当你进行ajax调用时,你需要单独为部分视图运行任何javascript。

将此代码放在局部视图中:

<script type="text/javascript">
    $(document).ready(function() {
        $('input.date').datepicker({
            dateFormat: "dd/mm/yy",
            maxDate: 0, 
            onClose: function () { $(this).valid(); } 
        });
    }); 
</script>

虽然 - 我建议不要使用$('input.date'),而是为您的输入元素提供唯一的ID /类,否则您将重置用户可能在页面上的其他“input.date”字段中输入的任何数据。用于例如$('input.partialView_Date)并在部分视图中调用您的输入字段:<input type="text" class="partialView_Date" />