2009-09-17 44 views
2

我有一個列表視圖,它有一個強類型的ViewModel,它包含我正在使用的實體列表以及一些其他會話類型的東西aruound。將ASP.Net MVC中的ViewModel從View傳遞到不同的視圖使用Get

單擊列表中的項目(Html.ActionLink)轉到Details視圖,我可以輕鬆地傳遞實體標識。但我也想從View中傳遞ViewModel的其餘部分。

我可以使用各種QueryString參數構建ActionLink,然後自定義ModelBinder可以選擇它們併爲我再次提供ViewModel對象。但是,我不喜歡這樣。

我可以得到自定義的ViewModel,當它被張貼回相同的頁面等補水時,但我怎麼能得到ViewModel到一個控制器操作使用GET到另一個視圖,而不使用ModelBinder,並通過簡單地放置ViewModel對象作爲目標Action方法中的一個參數?

回答

1

我不認爲你可以做你想做的,從我收集的是以下幾點:

  1. 雖然渲染列表操作,您要創建一個鏈接到另一個動作(可能上另一個控制器,但這不是關鍵)

  2. 此操作在觸發時應該可以訪問ActionLink方法首次執行時存在的原始ViewModel。

不幸的是,項目#1和#2彼此完全斷開,因此沒有真正的機構,以將當前視圖模型傳遞給將在一個不同的會話中執行的鏈路。

這並不是說有沒有解決方法,當然:

您可以生成像這樣的操作鏈接:

<%= 
    Html.ActionLink( 
        "Label", 
        "Action", 
        "Controller", 
        new {Parameter1 = Model.Data1, Parameter2 = Model.Data2}, 
        null 
        ) 
%> 

在你的鏈接的操作方法,您可以使用視圖模型的實例傳遞給該操作方法的參數。

+0

是的,我已經試過soemthing這樣的,即通過強將viewmodel位輸入到同一控制器上的GET ActionLink,但使用與參數類型和名稱中的actionlink參數匹配的不同操作。但是,這總是在Action中返回一個null參數,這就是我使用QueryString方法的原因。 我以爲它會被默認的modelbinder綁定。 注意:我假設在MVC 1.0中配置了默認的modelbinder,因爲我看不到如教程 – Redeemed1 2009-09-17 23:07:04

+0

中所示的ComplexModelBinder,但實際上只是找到了defaultModelBinder,因此請忽略最後評論的結尾。試着用默認配置 – Redeemed1 2009-09-17 23:10:51

+0

是的,我可以看到,在進入目標Action時,我有一個實例化的參數ok,但是這些值沒有反映到它中。 – Redeemed1 2009-09-17 23:18:07

0

我剛試過這個,它似乎工作。也試過沒有一種形式,它的工作也。不知道這是究竟是你想要什麼。

行動

[AcceptVerbs(HttpVerbs.Get)] 
public ActionResult Index(TestModel model) 
{ 
    ViewData["Message"] = model.Test1; 
    return View(); 
} 

型號

public class TestModel 
{ 
    public string Test1 { get; set; } 
    public string Test2 { get; set; } 
} 

查看

<% using (Html.BeginForm("Index","Home",FormMethod.Get)) 
{ %> 
     <%=Html.TextBox("Test1")%> 
     <%=Html.TextBox("Test2")%> 
     <input type=submit value=submit /> 
<% }%> 
+0

謝謝mxmissile,但不,這不是我想要的。 – Redeemed1 2009-09-17 23:20:09

相關問題