通过点击将对象传递给@ Html.ActionLink

时间:2013-02-26 17:41:37

标签: asp.net-mvc asp.net-mvc-4 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 个答案:

答案 0 :(得分:3)

@Html.ActionLink()方法将生成指向给定Controller / Action的url链接。因此,它只能包含可以包含在链接的URL中的参数。因此,您无法通过网址传递对象。

如果需要传递对存储在服务器上的对象的引用,请尝试设置链接的参数以提供对存储在服务器上的对象的引用,然后可以通过操作检索该对象(例如,有问题的menuItem的Id。。

ActionLink中的参数是通过您作为上述函数调用中的第三项传入的集合设置的。假设默认路由,这将提供一个类似于/Admin/EditPage/?name=XXX的地址,其中XXX是menuitem.Title的值。如果您在此处添加了其他内容,例如itemId = menuitem.Id,那么它会将此作为查询字符串参数添加到生成的网址中,然后该链接的目标操作就可以访问该参数。

答案 1 :(得分:0)

我确实用helpt @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>

答案 2 :(得分:0)

on the Controller:
[Route("customer/detail")]
public ActionResult Detail(Customer customer)
{
   return View(customer);
}

on the source view:

@model List<AI.Models.Customer>
@{
   ViewBag.Title = "Customer List";
   Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Customers</h2>
<ul>
  @foreach (var customer in Model)
  {
    <li>@Html.ActionLink(@customer.Name, "detail", "customer", @customer, null)</li>
  }
</ul>

on the target view:
@model AI.Models.Customer
@{
  ViewBag.Title = "Details";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

<h2>Customer Name : @Model.Name</h2>