2

我有一个列表视图,它有一个强类型的 ViewModel,其中包括我正在使用的实体列表以及我随身携带的其他一些会话类型的东西。

单击列表中的项目(Html.ActionLink)以转到详细信息视图时,我可以轻松传递实体 ID。但我也想从 View 传递 ViewModel 的其余部分。

我可以使用各种 QueryString 参数构建 ActionLink,然后自定义 ModelBinder 可以拾取它们并再次为我水合 ViewModel 对象。不过,我不喜欢这样。

我可以在将自定义 ViewModel 发布回同一页面等时使其重新水化,但是如何在不使用 ModelBinder 的情况下使用 GET 到另一个 View 并将 ViewModel 对象简单地放置为目标动作方法中的参数?

4

2 回答 2

1

我不认为你可以做你想做的事,我收集到的内容如下:

  1. 在呈现 List 动作时,您想要创建指向另一个动作的链接(可能在另一个控制器上,但这不是关键)

  2. 此操作在触发时应该可以访问第一次执行 ActionLink 方法时存在的原始 ViewModel。

不幸的是,项目#1 和#2 彼此完全断开连接,因此没有真正的机制将当前 ViewModel 传递给将在不同会话中执行的链接。

当然,这并不是说没有解决方法:

您可以像这样生成操作链接:

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

在链接的操作方法中,您可以使用传递给该操作方法的参数来实例化 ViewModel。

于 2009-09-17T22:27:16.887 回答
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 />
<% }%>
于 2009-09-17T22:39:15.773 回答