MVC4 剑道项目 Ajax.BeginForm UpdateTargetId 问题

Posted

技术标签:

【中文标题】MVC4 剑道项目 Ajax.BeginForm UpdateTargetId 问题【英文标题】:MVC4 Kendo Project Ajax.BeginForm UpdateTargetId Issue 【发布时间】:2013-01-20 16:49:25 【问题描述】:

我刚刚使用现有 MVC3 项目中的一些代码在 MVC4 中启动了一个新项目。我可以强制我的表单 ajax 重新加载特定的 DIV,但不使用正常的提交方法,只能使用测试 doSomthing() javascript 函数。我错过了什么?

澄清一下:第一个按钮不能正常工作,第二个可以 - 但我不想那样做。

查看

@using (Ajax.BeginForm("Method1", null,
new AjaxOptions  HttpMethod = "post", UpdateTargetId = "divPartial1" ,
new  id = "form1" ))

    <div class="data">
        @html.LabelFor(x => x.TotalSubmitted, new  @class = "total" )<div class="number total">@Html.FormatValue(Model.TotalSubmitted, "0:n0")</div>
        ...
    </div>
    <div class="details">
        <div id="divPartial1">
            @Html.Partial("ReportDashboardAppPartial")
        </div>
    </div>
    <div style="text-align: center;">
        <button type="submit" class="k-button"><span class="k-icon k-i-search" /></button>
        <button type="button" name="Save" value="Save" onclick="doSomething(); return false;"><span class="k-icon k-i-search" /></button>
    </div>

<script type="text/javascript">
    function doSomething() 
        $.ajax(
            url: '@Url.Action("Method1", "Controller")',
        type: 'post',
        data: $('form#form1').serialize(),
        success: function (result) 
            $('#divPartial1').html(result);
        
    );

</script>

_布局

@model BaseViewModel
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="utf-8" />
    <title>@ViewBag.Title</title>
    <link href="~/favicon.ico" rel="shortcut icon" type="image/x-icon" />
    <meta name="viewport" content="width=device-width" />
    @Scripts.Render("~/bundles/modernizr")
    @Scripts.Render("~/bundles/jquery")
    <link href="@Url.Content("~/Content/kendo.compatibility.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.3.1114/kendo.common.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.3.1114/kendo.dataviz.min.css")" rel="stylesheet" type="text/css" />
    <link href="@Url.Content("~/Content/kendo/2012.3.1114/kendo.default.min.css")" rel="stylesheet" type="text/css" />
    @RenderSection("styles", false)
    <script src="@Url.Content("~/Scripts/kendo/2012.3.1114/jquery.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo/2012.3.1114/kendo.all.min.js")"></script>
    <script src="@Url.Content("~/Scripts/kendo/2012.3.1114/kendo.aspnetmvc.min.js")"></script>
    @RenderSection("scripts", false)
</head>
<body>
    @Html.Partial("_AlertWindow")
    <div id="wrapper">
        <header>
            <div id="logindisplay">
                @Html.Partial("_LoginPartial")
            </div>
            <a href="@Url.Action("Index", "Home")">
                <div id="logo"></div>
            </a>
            <div id="title">
                <h1>Ha!</h1>
            </div>
            @(Html.Kendo().Menu().Name("Menu").BindTo("Main").SecurityTrimming(true))
        </header>
        <div id="main">
            @RenderBody()
        </div>
        <footer>
            <div id="version">@Html.ActionLink("Version " + @Model.CurrentVersion, "About", "Home")</div>
        </footer>
    </div>
    @RenderSection("end_scripts", false)
</body>
</html>

我知道这应该可行。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题。解决方法是在_Layout.cshtml页面中添加语句。

@Scripts.Render("~/bundles/jqueryval")

ScriptBundle("~/bundles/jqueryval")的定义如下

bundles.Add(new ScriptBundle("~/bundles/jqueryval").Include(
            "~/Scripts/jquery.unobtrusive*",
            "~/Scripts/jquery.validate*"));

【讨论】:

注意:我必须将它添加到 _layout.cshtml 的末尾 - 在 RenderBody() 之后。在将我的头撞到代码太久之后救了我。谢谢!

以上是关于MVC4 剑道项目 Ajax.BeginForm UpdateTargetId 问题的主要内容,如果未能解决你的问题,请参考以下文章

在剑道窗口内时,局部视图中的 MVC4 Ajax 表单返回整个页面

在 MVC4 razor 中使用“远程”验证处理多个提交按钮

ASP.NET MVC 3 - Ajax.BeginForm 与 jQuery 表单插件

自坑实录 - Asp.net MVC中无法使用@Ajax.BeginForm问题解决

剑道网格弹出显示

MVC小系列Html.BeginForm与Ajax.BeginForm