2012-09-10 205 views
1

我需要創建一個子視圖,該視圖允許用戶在主GridView上選擇一行後插入相關數據。將參數傳遞給索引操作

子視圖必須接收的ID將指示其是父行。

如何傳遞此參數? ViewBag?

PS:該視圖和控制器是不同的,並且子視圖是使用Html.ActionLink到另一個控制器的索引作用打開。

回答

0

傳遞父的ID作爲參數來調用其子視圖的操作方法。

@Html.ActionLink("Add Related Data","Add",new { @id=364}) 

與動態值替換364從您的視圖

而在你的孩子的行動,從ID獲取父對象,並顯示在子視圖。假設你有一個ViewModel爲他的孩子視圖製作他的視圖。

public class ChildDetails 
{ 
    public int ID { set;get;} 
    public string Note { set;get;} 
    public int ParentID { set;get;} 
    public string ParentName { set;get;} 
} 

獲取父級詳細信息並在ViewModel中爲子視圖設置相關屬性值。

public ActionResult Add(int id) 
{ 
    var parent=yourRepositary.Get(id); 
    ChildDetails childViewModel=new ChildDetails(); 
    childViewModel.ParentID=id; 
    childViewModel.Name=parent.Name; 
    return View(childViewModel); 
} 

你的孩子視圖將大力綁定到ChildDetails

@model ChildDetails 

<h2>@Model.ParentName</h2> 
@using(Html.BeginForm()) 
{ 
    @Html.TextBoxFor(x=>x.Note) 
    @Html.HiddenFor(x=>x.ParentId) 
    <input type="submit" /> 
} 
+0

我想利用現有的索引操作列出子項,而不是創建一個新的動作。可能嗎? –

+0

您可以使用現有的操作。我寫了添加方法,使其成爲一個通用的例子 – Shyju

0

將它作爲查詢字符串,因爲你打開不同的動作。

0

您可以通過多種方式傳遞參數。

ViewBag.MyParam = "1"; 

ViewData("MyParam") = "1"; 

TempData("MyParam") = "1"; 

注意:這是VB,所以C#會有些不同。

否則,您可以通過查詢字符串傳遞由羅布說。