0

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

如果我没有正确描述问题或者您需要更多信息,请告诉我,我会尽力提供更多信息。

非常感谢。

- - 更新 - -

我从 Chrome 控制台获得的错误数据

这是在控制台中的“500 内部服务器错误”下。

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
4

0 回答 0