MVC4 _Layout.cshtml脚本包

时间:2012-05-22 00:26:03

标签: c# asp.net-mvc partial-views asp.net-mvc-4 bundles

在我的_Layout.cshtml页面的head部分,我有这行代码......

<script src="@System.Web.Optimization.BundleTable.Bundles.ResolveBundleUrl("~/Scripts/js")"></script>

我检查了脚本目录,jquery-ui就在那里。我对MVC很新,特别是MVC4。我和3合作过,我不相信Bundles与我记忆中的任何事情有关,或者至少使用过。从我得到的,它将所有脚本捆绑成一个紧凑的文本格式,取出空格和诸如此类的东西。所以我假设jquery-ui将被添加到每个页面,因为它是一个共享页面,如Web窗体中的母版页。

现在在我的Index.cshtml文件中使用了我在顶部的共享布局页面。

$(function () {
    $('#DateOfBirth').datepicker();
});

我在我的Index.cshtml文件中添加了一个包含此代码的部分视图。

@Html.Partial("_SignUp", Model)

部分视图包含我正在尝试将其添加到的字段。不幸的是,它没有将datepicker添加到type = text的输入字段中,是的,该字段的id =“#DateOfBirth”。这是什么交易?

编辑:我收到此错误 - “未捕获的TypeError:对象[对象对象]没有方法'datepicker'

2 个答案:

答案 0 :(得分:4)

我看不出你的代码有什么问题,我无法重现这个问题(ASP.NET MVC 4 Beta)。以下工作对我来说很好:

  1. 使用Internet模板
  2. 创建新的ASP.NET MVC 4项目
  3. 添加视图模型:

    public class MyViewModel
    {
        public DateTime DateOfBirth { get; set; }
    }
    
  4. HomeController中:

    public class HomeController : Controller
    {
         public ActionResult Index()
         {
            return View(new MyViewModel
            {
                DateOfBirth = DateTime.Now
            });
        }
    }
    
  5. Index.cshtml

    @model MyViewModel
    
    <script type="text/javascript">
    $(function () {
        $('#DateOfBirth').datepicker();
    });
    </script>
    
    @Html.Partial("_SignUp", Model)
    
  6. _SignUp.cshtml

    @model MyViewModel
    @Html.EditorFor(x => x.DateOfBirth)
    
  7. 结果:

  8. enter image description here

    所以我猜现在问题变成了,你做了什么不同的事情?

答案 1 :(得分:4)

我看到的情况是,如果我将javascipt代码从视图中删除

<script type="text/javascript">
$(function () {
    $('#StartDateTime').datepicker();
});
</script> 

并将其放在

下面的_Layout.cshtml中
@Scripts.Render("~/bundles/jquery","~/bundles/jqueryui")
@RenderSection("scripts", required: false) 

行(注意我必须包含jqUi包)它工作很快!!!

但是我希望它以我希望它工作的方式工作。所以在脚本完全加载之前就会触发文档就绪?

更新: 只需用@section scripts {}包围你的脚本,这将在页面底部的jquery.js文件下面显示。

@section scripts {
<script type="text/javascript">
    $(function () {

        // Accordion
        $("#accordion").accordion({ header: "h3", active: 0, fillSpace: false });
        $("#bidTabs").tabs();
        $("#jobTabs").tabs();
        $("#settingsTabs").tabs(); 
    });
</script>
}