从视图将模型传递给下一个控制器

时间:2017-06-24 09:29:57

标签: asp.net-core-mvc

我的表单包含少量输入,nameemailmessage和一些checkboxes。我已经为这些输入创建了一个模型,并设置了我需要的所有验证。

但现在我也希望将模型(即@model MyModel)或模型的某些对象属性与这些输入一起传递。

用我的模型填充VewBag/viewData是一种方法吗?

@{
      ViewBag.MyModel = Model;
      // or ViewBag.ThatProperty = Model.ThatProperty
}

或者我还有更好的方法吗?

1 个答案:

答案 0 :(得分:1)

ViewBag ViewData 在从服务器到客户端的一次旅程中保持不变,而不是相反。

无法将视图中的对象传递给控制器​​。如果它是数据库对象,您可以使用下面描述的两种方法之一传递对象Id,然后在帖子上查询数据库。

如果没有其他方法,可以将对象编码为JSON字符串(例如,使用Newtonsoft包),并使用下面描述的两种方法之一传递它,但这不是最佳选择。

要将属性从View传递到Controller,您有两个选择:

  • 网址参数
  • 隐藏的字段

网址参数

<form ... asp-route-ThatProperty="@Model.ThatProperty">
...
</form>

表单字段

<form>
<input type="hidden" name="ThatProperty" value="@Model.ThatProperty" />
</form>

控制器操作

如果您的模型上不存在'ThatProperty',请将其作为额外参数接收。

public IActionResult MyAction (MyModel model, string ThatProperty)
{
    ...
}