2013-02-26 79 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>