WebGrid ActionLink 如何获取行对象

WebGrid ActionLink how to get row object

我有 WebGrid,它是使用模型构建的 我使用以下代码构建它:

查看

@model IEnumerable<ExampleMVC4.Models.LicenseInfo>
@{
    ViewBag.Title = "Licenses";
    WebGrid grid = new WebGrid(Model);    
}
<h2>Licenses</h2>
@grid.GetHtml(tableStyle: "table table-striped table-hover",
  columns: new[] {
    grid.Column("SerialNumber"),                                   
    grid.Column("Name"),
    grid.Column("Organization"),
    grid.Column("Email"),
    grid.Column("DateActivated"),
    grid.Column(header: "IsValid", format: item=>new HtmlString(Html.ActionLink((string)item.IsValid.ToString(), "Deactivate", new { @id =  item.SerialNumber} ).ToString()))
  })
  <p>@ViewBag.Message</p>

控制

public ActionResult Index()
{
    var data = getLicenseInfoList();
    return View(data);
}

[HttpPost]
public ActionResult Deactivate(string serialNum_)
{
    if (serialNum_ != null)
    {
        ViewBag.Message = serialNum_;
    }
    return View();
}

但是我无法让它调用带有序列号的Deactivate()函数。

处理 ActionLink 内部点击 WebGrid 的正确方法是什么?

您的 ActionLink 正在生成一个名为 id 的路由参数(... new { @id = item.SerialNumber} .. 但您的方法参数名称是 serialNum_。将方法签名更改为

[HttpGet]
public ActionResult Deactivate(string id)

另请注意,它是一个 link,所以它是一个 GET,而不是一个 POST(虽然不清楚该方法的作用)