2009-09-17 49 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

相关问题