2014-10-27 90 views
0

我是MVC的新手,并且在获取AJAX post中选定的表索引时遇到问题。从表中获取选定的行ID 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文章。这样你就知道你选择了哪个项目。 – 2014-10-27 18:43:27

+0

它看起来像你有代码将执行一个form.submit,发回所有的行(实际上,因为你只有一个hiddenFor与Id它将发回所有的ID)。你想要做什么按钮点击,发送单个Id到控制器?您真正的问题与您已注释的ActionLink有关吗? – tlbignerd 2014-10-27 19:08:00

+0

嗨,谢谢你的回复。其实我只想要Rateband而不是ContractModel。我想要的是选择单击我应该在控制器中获得选定的速率带 – 2014-10-28 05:08:37

回答

3

如果您位于选定行的ID之后,则可以使用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发送的ID。

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

} 
+0

嗨乔希,我删除了动作链接,因为我想要调用控制器的ajax,我想访问控制器中选定的速率带。 – 2014-10-28 05:10:47

+1

一旦你将id传回给控制器,你可以用它查找你需要的任何东西。 – JB06 2014-10-28 13:24:02