MVC 4:将ViewModel从视图发送到另一个视图。一些属性变为null

时间:2013-08-05 20:01:02

标签: asp.net-mvc razor asp.net-mvc-controller

我有一个像这样的简单视图:

@using MyProject.WebClient.Models
@model LoginClienteModel

<h1>@ViewBag.Title</h1>
@{
    <text>
        <h2>
            <span>Olá @Model.Login . </span>
        </h2>
        <h3>
            <span>Info: (@Model.ProperyOne)</span>
        </h3>
    </text>
}
<br/>
@Html.ActionLink("Option 1", "OptOne", "Home", new {pdModel = new OptOneModel{Login = Model.Login,Data = DateTime.Now.Date}});

显示此视图时,模型中的所有数据都会正确显示。你可以看到我有另一个ActionLink,指向行动OptOne。该操作需要OptOneModel类型的参数pdModel。如您所见,我使用当前模型值实例化它。 但是当执行我的Action时,Login属性为null,只有Data不为null。

  public ActionResult OptOne(OptOneModel pdModel)
  {
      return View(pdModel); // <-- Here only Data property is not null
  }

我迷路了。我看不出有什么问题。

3 个答案:

答案 0 :(得分:1)

不幸的是,您无法将复杂类型传递给ActionLink的路径值。手动调用一个Action,我相信你可以,但不能用于链接。所以:

@Html.ActionLink("Option 1", "OptOne", "Home", new {pdModelId = Model.YourUniqueId, dateRendered = DateTime.Now.Date});

同时,服务器端:

  public ActionResult OptOne(int pdModelId, DateTime dateRendered)
  {
      // retrieve model again based on your Id
      return View(pdModel);
  }

答案 1 :(得分:1)

您无法使用超链接传递模型。它只适用于Post。

相反,您可以使用routeValues生成查询字符串。

@Html.ActionLink("Option 1", "OptOne", "Home", 
   new { Model.Login, Data = DateTime.Now.Date }, null)

public ActionResult OptOne(string login, DateTime data)
{
    // Do something with login and data.
    return View();
}

答案 2 :(得分:1)

使用ActionLink过载变异,

ActionLink(string linkText,string actionName,string controllerName,object routeValues,object htmlAttributes)

@Html.ActionLink("Option 1", "OptOne", "Home", new OptOneModel{ Login = Model.Login, Data = DateTime.Now.Date}, null);

OR

ActionLink(string linkText,string actionName,object routeValues)

@Html.ActionLink("Option 1", "OptOne", new OptOneModel{ Login = Model.Login, Data = DateTime.Now.Date});

希望这会有所帮助。