2013-04-07 3 views
1

У меня есть следующая форма, где я добавляю элементы в список и обновляю результирующую таблицу. так вот код, который я в настоящее время:@ Ajax.ActionLink поля формы сообщения

View (сильно типизированных):

@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> 

ViewModel:

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

Прямо сейчас, сообщение назад через кнопку отправки Ajax.Beginform работает, и я могу отправить назад модель и обновить службы (добавить один к ней) и вернуть ее.

Моя проблема заключается в том, что я хотел бы иметь возможность удалить службу из списка. для этого я думал, что буду использовать Ajax.Actionlink, и он отправит обратно с идентификатором. проблема в том, что он возвращает только идентификатор, а не модель.

Теперь оглядываясь на него. По-видимому, невозможно отправить текущую модель обратно в действие с помощью Ajax.Actionlink, как бы вы, парни, справились с этим?

Я думал, что буду умным и воспользуюсь перегрузкой Ajax.Actionlink и добавлю new{ model = Model, id = @Model.Services[i].serviceId } к ней, но ее нет.

В ViewModel имеется много других данных (для пространства, которое я выбрал из вышеприведенного кода), и очень нецелесообразно отправлять все эти данные по одному через вышеупомянутую перегрузку.

+0

Как вы собираетесь удалить товар? Можете ли вы PLZ опубликовать метод действий? – Sharun

ответ

1

Вы можете использовать метод form.serialize, чтобы опубликовать всю форму в действии с помощью вызова ajax. Вместо использования ссылки действий попробуйте кнопку. И в событии onclick этой кнопки, сериализуйте форму и отправьте ее.

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

    $.ajax({ 
     type: "POST", 
     url:'@Url.Action("deleteActionName")', 
     data: $('form').serialize(), 
     success: function(response) { 
     console.log(response); 
     } 
    }); 
    }); 
+0

Привет, Спасибо за помощь в этом. Однако это решение не будет работать само по себе, так как мне также нужно отправить обратно идентификатор строки (что кнопка включена), чтобы действие использовало для удаления службы из ViewModel. Кнопка «Удалить» сидит в каждой строке таблицы, и у меня есть доступ к serviceId. Еще раз спасибо – hjavaher

+0

В этом случае вы можете сохранить идентификатор в скрытом поле и отправить его вместе с формой. – Sharun