2013-02-26 193 views
1

我想要做的是传递被点击的项目到控制器进行编辑,但唯一可以传递给控制器​​的是一个字符串。通过@ Html.ActionLink传递对象与点击

视图:

foreach (MenuItemViewModel menuitem in category.MenuItemList) 
{ 
    <span class="MenuItemTitel"> 
    @if (IsAdmin) 
    { 
     <span class="AdminSpan"> 
      @Html.ActionLink("Edit", "EditPage", "Admin", new { name = menuitem.Title }) 
     </span> 
    } 
     @menuitem.Title 
    </span> 
} 

控制器:

public ActionResult EditPage(MenuItemViewModel MenuItem) {} 

回答

3

@Html.ActionLink()方法将生成的URL链接到给定的控制器/动作。因此,它只能包含可以包含在链接的url中的参数。所以你不能通过URL传递一个对象。

如果您需要传递存储在服务器上的对象的引用,则尝试设置链接的参数以引用存储在服务器上的对象,然后可以通过操作检索该对象(例如,所讨论的menuItem的Id)。

ActionLink中的参数通过您在上面的函数调用中作为第三项传入的集合进行设置。假设默认路由,这将给出看起来像/Admin/EditPage/?name=XXX的地址,其中XXX是menuitem.Title的值。如果您在此处添加了其他内容(例如itemId = menuitem.Id),则会将其作为查询字符串参数添加到生成的url中,然后可以通过此链接的目标操作访问此参数。

+0

我不知道我知道你所说的“设置链接的参数给一个意思参考存储在服务器上的对象“ – NNassar 2013-02-26 19:15:43

+0

我编辑了答案以提供更多关于此的详细信息。 – 2013-02-26 19:20:36

0

我没有通过与帮助@Html.Action()对象。请参见下面的代码:

@Html.ActionLink("Lista Valores", "Lista", "RandomName", 
new { 
    Id = @ViewBag.Id, 
    Name = "fdsfsadf", 
    LastName = @ViewBag.LastName, 
    Breed = @ViewBag.Breed, 
    System = ViewBag.sys 
}, null) 

控制器:

public ActionResult Lista(CharNames character) 
{ 
    return View(character); 
} 

查看:

<p>@Html.LabelFor(x => x.Id) @Model.Id</p> 
<p>@Html.LabelFor(x => x.Name) @Model.Name</p> 
<p>@Html.LabelFor(x => x.LastName) @Model.LastName</p> 
<p>@Html.LabelFor(x => x.Breed) @Model.Breed</p> 
<p>@Html.LabelFor(x => x.System) @Model.System</p>