所以我在一个页面上有三个部分视图,它们执行创建,更新和删除功能。
<div id="create-example">
@Html.Action("OrderCreate","Home")
</div>
<div id="update-example">
@Html.Action("OrderUpdate","Home")
</div>
<div id="delete-example">
@Html.Action("OrderDelete","Home")
</div>
如果我在每个部分视图中包含jquery.unobtrusive-ajax.js和jquery.validate.js,那么AJAX表单在所有部分视图中都成功运行,但是因为我刷新所有3个(onsuccess),所以调用.js文件多次导致多次创建/更新/删除。
现在我知道你应该只加载一次文件,但当我把它们放在我的_Layout.cshtml文件中时,它们不会被加载,当我提交其中一个部分视图表单时,它仍然可以工作但不会保留同一页面并转到控制器/操作页面。
下面是创建局部视图(仅通过直接在AJAX表单中包含js脚本来工作)
@model EntityFrameworkTutorial.Models.OrderViewModel
@{ var quantities = new SelectList(Enumerable.Range(1, 10)); }
@using (Ajax.BeginForm("OrderCreate", new AjaxOptions { HttpMethod = "POST", UpdateTargetId = "create-example", InsertionMode = InsertionMode.Replace, OnSuccess="RefreshCRUD" }))
{
<script src="~/Scripts/jquery.unobtrusive-ajax.min.js"></script>
<script src="~/Scripts/jquery.validate.min.js"></script>
<br />
<label for="Order_OrderCustomerID" class="col-sm-2 control-label">Customer</label>
@Html.DropDownListFor(m => m.Order.OrderCustomerID, Model.CustomerList)
<br /><br />
<label for="Order_OrderProductID" class="col-sm-2 control-label">Product</label>
@Html.DropDownListFor(m => m.Order.OrderProductID, Model.ProductList)
<br /><br />
<label for="Order_OrderQuantity" class="col-sm-2 control-label">Quantity</label>
@Html.DropDownListFor(m => m.Order.OrderQuantity, quantities)
<br /><br />
<input type="submit" class="btn btn-default btn-lg" value="Create Order" />
}
-------
刚尝试添加
@{
Layout = "~/Views/Shared/_Layout.cshtml";
}
在每个局部视图中,它解决了在_Layout中仅加载.js文件一次但是当我创建订单时,仍会创建多个订单!!
有什么想法吗?