2014-10-27 5 views
0

Я новичок в MVC и сталкиваюсь с проблемой получения выбранного индекса таблицы в сообщении AJAX.Получить выбранный идентификатор строки из таблицы MVC

У меня следующий класс

public class ContractModel 
{ 
    public long HotelId { get; set; } 
    public long RateCodeId { get; set; } 
    public string RateCode { get; set; } 
    public string HotelName { get; set; } 
    public List<RateBandModel> RateBands { get; set; } 
} 

public class RateBandModel 
{ 
    public long Id { get; set; } 
    public DateBandModel Applicable { get; set; } 
    public DateBandModel Bookable { get; set; } 
    public string RoomType { get; set; } 
    public long RoomTypeId { get; set; } 
} 

А вот мой частичный вид

@model Packages.Website.Models.ContractModel 

@using (Ajax.BeginForm("SelectRateBand", "Contract", new AjaxOptions() { UpdateTargetId = "product-table" })) 
{  
    <input type="hidden" id="rowId" name="rowId" /> 
    <table border="0" width="100%" cellpadding="0" cellspacing="0" id="product-table"> 
    <tr> 
     <th class="table-header-repeat line-left"><a href="">Room Type</a> </th> 
     <th class="table-header-repeat line-left"><a href="">Board Basis</a></th> 
     <th class="table-header-repeat line-left"><a href="">From Date</a></th> 
     <th class="table-header-repeat line-left"><a href="">To Date</a></th> 
     <th class="table-header-repeat line-left"><a href="">Book From</a></th> 
     <th class="table-header-repeat line-left"><a href="">Book To</a></th> 
     <th class="table-header-options line-left"><a href="">Options</a></th> 
    </tr> 
    @Html.HiddenFor(modelItem => Model.HotelId) 
    @Html.HiddenFor(modelItem => Model.RateCodeId) 
    @Html.HiddenFor(modelItem => Model.RateBands) 
    @foreach (var item in Model.RateBands) 
    { 
     <tr> 
      <td> 
       @Html.HiddenFor(modelItem => item.Id) 
       @Html.DisplayFor(modelItem => item.RoomType) 
      </td> 
      <td>@Html.DisplayFor(modelItem => item.BoardBasis)</td> 
      <td>@Html.DisplayFor(modelItem => item.Applicable.FromDate)</td> 
      <td>@Html.DisplayFor(modelItem => item.Applicable.ToDate) </td> 
      <td>@Html.DisplayFor(modelItem => item.Bookable.FromDate) </td> 
      <td>@Html.DisplayFor(modelItem => item.Bookable.ToDate) </td> 
      <td class="options-width"> 
       <input type="submit" name="command" class="form-submit" /> 

      </td> 
     </tr> 
    } 
    </table> 
} 

В контроллере

[HttpPost] 
    public ActionResult SelectRateBand(ContractModel contract) 
    { 
     //Some code here 

    } 

Теперь в контроллере я получаю Contract.DateBands NULL И у меня есть нет Идея, как получить выбранный индекс, пожалуйста, помогите мне

+0

Что я обычно делаю, так это создать ViewModel только полей, которые я ищу для захвата. Если я читаю это правильно, похоже, что вы сразу после RateBand. Таким образом, ваш пост контроллера принимает RateBand вместо ContractModel. Кроме того, вам понадобится форма для каждой строки или предпочтительно пост Ajax, аналогичный тому, что вы закомментировали. Таким образом, вы знаете, какой элемент вы выбрали. –

+0

Похоже, что код, который у вас есть, будет выполнять form.submit, посылая все строки назад (и действительно, поскольку у вас есть только скрытый FOR, с идентификатором он отправит все идентификаторы обратно). Что именно вы пытаетесь сделать при нажатии кнопки, отправить один идентификатор на контроллер? Ваша реальная проблема связана с ActionLink, которую вы прокомментировали? – tlbignerd

+0

Привет, Спасибо за ответ. На самом деле я хочу только Rateband not ContractModel. Я хочу, чтобы на выбранном клике я должен был выбрать выбранную полосу частот в контроллере –

ответ

3

Если вы после Ид выбранной строки, вы можете передать ее как значение маршрута с помощью вашего помощника Actionlink. Я нахожу, что использование названных параметров больше передает вашу цель.

@Html.ActionLink(linkText: "Edit", 
       actionName: "SelectRateBand", 
       controllerName: "YourController", 
       routeValues: new { id = item.Id }, 
       htmlAttributes: new { @class = "icon-1 info-tooltip", @Title = "Edit" }); 

И в вашем контроллере измените действие, чтобы принять параметр id, чтобы он соответствовал идентификатору, отправленному из ActionLink.

[HttpPost] 
public ActionResult SelectRateBand(string id) 
{ 
    //Some code here 

} 
+0

Привет, Джош, я удалил ссылку на действие, потому что хочу сделать вызов ajax контроллеру, и я хочу получить доступ к выбранной скорости в контроллере. –

+1

Ну, как только вы передадите идентификатор обратно контроллеру, вы можете посмотреть все, что вам нужно. – JB06

Смежные вопросы