我要做的是将点击的项目传递给控制器进行编辑,但我唯一可以传递给控制器的是字符串。
视图:
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) {}
答案 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>