1

我想要做的是将被点击的项目传递给控制器​​进行编辑,但我唯一可以传递给控制器​​的是一个字符串。

看法:

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) {}
4

3 回答 3

3

@Html.ActionLink()方法将生成一个指向给定 Controller/Action 的 url 链接。因此,它只能包含可以包含在链接的 url 中的参数。所以你不能在 url 上传递一个对象。

如果您需要传递对存储在服务器上的对象的引用,请尝试设置链接的参数以提供对存储在服务器上的对象的引用,然后可以通过操作检索该对象(例如,相关菜单项的 ID)。

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

于 2013-02-26T19:09:24.883 回答
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>
于 2016-02-14T13:14:00.437 回答
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>
于 2021-04-26T06:03:33.670 回答