将ASP.Net MVC中的ViewModel从View传递到不同的视图使用Get
我有一个列表视图,它有一个强类型的ViewModel,它包含我正在使用的实体列表以及一些其他会话类型的东西aruound。将ASP.Net MVC中的ViewModel从View传递到不同的视图使用Get
单击列表中的项目(Html.ActionLink)转到Details视图,我可以轻松地传递实体标识。但我也想从View中传递ViewModel的其余部分。
我可以使用各种QueryString参数构建ActionLink,然后自定义ModelBinder可以选择它们并为我再次提供ViewModel对象。但是,我不喜欢这样。
我可以得到自定义的ViewModel,当它被张贴回相同的页面等补水时,但我怎么能得到ViewModel到一个控制器操作使用GET到另一个视图,而不使用ModelBinder,并通过简单地放置ViewModel对象作为目标Action方法中的一个参数?
我不认为你可以做你想做的,从我收集的是以下几点:
虽然渲染列表操作,您要创建一个链接到另一个动作(可能上另一个控制器,但这不是关键)
此操作在触发时应该可以访问ActionLink方法首次执行时存在的原始ViewModel。
不幸的是,项目#1和#2彼此完全断开,因此没有真正的机构,以将当前视图模型传递给将在一个不同的会话中执行的链路。
这并不是说有没有解决方法,当然:
您可以生成像这样的操作链接:
<%=
Html.ActionLink(
"Label",
"Action",
"Controller",
new {Parameter1 = Model.Data1, Parameter2 = Model.Data2},
null
)
%>
在你的链接的操作方法,您可以使用视图模型的实例传递给该操作方法的参数。
我刚试过这个,它似乎工作。也试过没有一种形式,它的工作也。不知道这是究竟是你想要什么。
行动
[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 />
<% }%>
谢谢mxmissile,但不,这不是我想要的。 – Redeemed1 2009-09-17 23:20:09
是的,我已经试过soemthing这样的,即通过强将viewmodel位输入到同一控制器上的GET ActionLink,但使用与参数类型和名称中的actionlink参数匹配的不同操作。但是,这总是在Action中返回一个null参数,这就是我使用QueryString方法的原因。 我以为它会被默认的modelbinder绑定。 注意:我假设在MVC 1.0中配置了默认的modelbinder,因为我看不到如教程 – Redeemed1 2009-09-17 23:07:04
中所示的ComplexModelBinder,但实际上只是找到了defaultModelBinder,因此请忽略最后评论的结尾。试着用默认配置 – Redeemed1 2009-09-17 23:10:51
是的,我可以看到,在进入目标Action时,我有一个实例化的参数ok,但是这些值没有反映到它中。 – Redeemed1 2009-09-17 23:18:07