1

我有以下表格,我将项目添加到列表并更新结果表。所以这是我目前拥有的代码:

查看(强类型):

@using (Ajax.BeginForm("AddService", "Manager", 
           new AjaxOptions { UpdateTargetId = "servicePartial", 
                             HttpMethod = "Post", 
                             LoadingElementId = "loading" }))
{
       <input type="submit" value="Add New" />                
       <div class="widget-content table-container" id="servicePartial">
            @Html.Partial("_Services", Model)
       </div>
}

部分的:

@model Project.Model.ServicesViewModel
<table id="demo-dtable-02" class="table table-striped">
<thead>
    <tr>
        <th>Service</th>
        <th>Price</th>
        <td class="action-col">Actions</td>
    </tr>
</thead>
<tbody id="services">
    @if (Model != null)
    {
        if (Model.Services != null)
        {
            if (Model.Services.Count > 0)
            {
                for (int i = 0; i < Model.Services.Count; i++)
                {
                     <tr>
            <th>@Model.Services[i].name</th>
            <th>@Model.Services[i].price</th>
            <td class="action-col">
                 @Html.HiddenFor(x=>x.Services[i].name)
                @Html.HiddenFor(x=>x.Services[i].price)
                @Html.HiddenFor(x=>x.Services[i].serviceId)
                @Ajax.ActionLink(" X ", "Appointment", "Manager", 
                                 new{ model = Model, 
                                      id = @Model.Services[i].serviceId }, 
                                      new AjaxOptions
                                       { 
                                           UpdateTargetId = "servicePartial", 
                                           LoadingElementId = "loading",
                                           HttpMethod="Post" 
                                       })
            </td>

        </tr>
                }                   
            }
        }

    }
</tbody>
</table>

视图模型:

public class ServicesViewModel
{
    public List<Service> Services { get; set; }
}

现在,通过Ajax.Beginform作品的提交按钮发回,我可以发回模型并更新服务(添加一个)并返回它。

我的问题是我也希望能够从列表中删除服务。为此,我想我会使用 aAjax.Actionlink并且它确实使用 id 发回。问题是它只返回 id 而不是模型。

现在环顾四周,显然不可能使用Ajax.Actionlink你们将如何处理这个问题将当前模型发送回操作?

我以为我会很聪明,并使用重载Ajax.Actionlink并添加 new{ model = Model, id = @Model.Services[i].serviceId }到它,但它不行。

ViewModel 中还有很多其他数据(为了空间,我已将其从上述代码中取出),通过上述重载将所有这些数据一一发送对我来说是非常不切实际的。

4

1 回答 1

1

您可以使用 form.serialize 方法将整个表单发布到使用 ajax 调用的操作。尝试使用按钮,而不是使用操作链接。并在该按钮的 onclick 事件中,序列化表单并提交。

$('#deleteButton').click(function(){

    $.ajax( {
      type: "POST",
      url:'@Url.Action("deleteActionName")',
      data: $('form').serialize(),
      success: function( response ) {
        console.log( response );
      }
    } );
  } );
于 2013-04-08T05:11:25.637 回答