我一直在尝试实现一个用户可以添加/删除当前实体的子实体的系统,但是我在使用Ajax.BeginForm
辅助方法时遇到了麻烦(这是我第一次真正使用它) 。基本上,当我单击提交按钮时,它不会在我的控制器中调用指定的操作。
我已经搜索了几个小时但没有成功,之前人们遇到的大多数问题都是由于某些图书馆没有被引用,但我很确定这不是问题所在。
无论如何,这是我的代码的重要部分:
部分视图
@using MyProject.Domain.Entities;
@model MyProject.WebUI.ViewModels.UserCustomerViewModel
<div id = "meh222">
@using (
Ajax.BeginForm("AddCustomer", "User",
new AjaxOptions() { UpdateTargetId = "meh222", HttpMethod = "Post" })
)
{
<label>Customers</label>
@*@Ajax.ActionLink("Add Customer", "AddCustomer", "User", new { userID = Model.UserID, customerID = 1001 },
new AjaxOptions() { UpdateTargetId = "meh222", HttpMethod = "POST" }, new { @class = "standardbutton" })*@
<fieldset>
<legend>CustomersLegend</legend>
@Html.HiddenFor(m => m.UserID)
@Html.DropDownListFor(m => m.Customers, new SelectList(Model.AllCustomers, "CustomerID", "Name"))
<p>
<input type="submit" value="Add Customer" />
</p>
</fieldset>
}
<table class="tbl2" id="tbl2">
<thead>
<tr>
<th>CustomerID</th> <th>Name</th> <th>Actions</th>
</tr>
</thead>
<tbody>
@if (Model != null)
{
foreach (Customer item in Model.Customers)
{
<tr>
<td>
@Html.DisplayTextFor(i => item.CustomerID)
</td>
<td>
@Html.DisplayTextFor(i => item.Name)
</td>
<td>
@Ajax.ActionLink("Delete", "DeleteCustomer", "User", new { userID = Model.UserID, customerID = item.CustomerID },
new AjaxOptions() { UpdateTargetId = "meh222" }, new { @class = "standardbutton" })
</td>
</tr>
}
}
</tbody>
</table>
</div>
主视图
<div>
@{ Html.RenderPartial("CustomerPartial", Model.CustomerVM); }
</div>
控制器
[AcceptVerbs(HttpVerbs.Post)]
public PartialViewResult AddCustomer(UserCustomerViewModel vm)
{
return PartialView("CustomerPartial");
}
查看模型
public class UserCustomerViewModel
{
public int UserID;
public IEnumerable<Customer> Customers { get; set; }
public IEnumerable<Customer> AllCustomers { get; set; }
}
我的_Layout中的脚本
<script src="@Url.Content("~/Scripts/jquery-1.5.1.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-1.5.1.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery-ui-1.8.11.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/jquery.unobtrusive-ajax.min.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftMvcAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/MicrosoftAjax.js")" type="text/javascript"></script>
<script src="@Url.Content("~/Scripts/modernizr-1.7.min.js")" type="text/javascript"></script>
只是几个笔记:
Ajax.ActionLink
已注释掉。这是我之前使用的(并且它有效),但我需要对CustomerID进行硬编码,因此更改为Ajax.BeginForm
,以便我可以访问从ViewModel的AllCustomers属性填充的DropDownList的值。有没有人知道为什么我的提交没有访问我的控制器中的AddCustomer
操作?
如果我没有正确解释问题或者您需要更多信息,请告诉我,我会尝试提供更多信息。
非常感谢。
---- ---- UPDATE
我从Chrome控制台获取的错误数据
这是在控制台中的“500 Internal Server Error”下。
d.support.ajax.d.ajaxTransport.send jquery-1.5.1.min.js:19
d.extend.ajax jquery-1.5.1.min.js:19
e jquery.unobtrusive-ajax.min.js:5
(anonymous function) jquery.unobtrusive-ajax.min.js:5
E jquery-1.5.1.min.js:19
d.event.handle jquery-1.5.1.min.js:19
d.event.add.k.handle.m jquery-1.5.1.min.js:19