1

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

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

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

可能是什么原因?

非常感谢!!

这是代码:

我的主视图包含一个 Ajax 表单。里面有2个局部视图。第二个有日期选择器输入。

@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

这些 datepicker 和 watermark jquery 在页面最初加载时确实有效....

4

1 回答 1

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”字段中输入的任何数据。用于 ex:$('input.partialView_Date)并在局部视图中调用您的输入字段:<input type="text" class="partialView_Date" />

于 2012-11-05T06:58:32.130 回答