Ajax BeginForm没有在控制器中调用动作

时间:2012-09-08 13:09:30

标签: ajax asp.net-mvc-3

我一直在尝试实现一个用户可以添加/删除当前实体的子实体的系统,但是我在使用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

0 个答案:

没有答案