WebGrid ActionLink如何获取行对象

时间:2015-01-25 05:57:13

标签: c# .net asp.net-mvc-4 webgrid actionlink

我有使用Model I构建的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点击的正确方法是什么?

1 个答案:

答案 0 :(得分:0)

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

[HttpGet]
public ActionResult Deactivate(string id)

还要注意它的一个链接,所以它是一个GET,而不是一个POST(虽然它不清楚该方法的作用)