【问题标题】:passing a model to the next controller from view将模型从视图传递到下一个控制器
【发布时间】:2017-11-27 19:56:06
【问题描述】:

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

但现在我还想传递我的模型(即来自@model MyModel),或者更确切地说,我的模型的一些对象属性与这些输入一起传递。

用我的模型填充VewBag/viewData 是否可行?

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

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

【问题讨论】:

    标签: asp.net-core-mvc


    【解决方案1】:

    ViewBagViewData 在从服务器到客户端的一次行程中持续存在,而不是相反。

    无法将对象从视图传递到控制器。如果它是一个数据库对象,您可以使用下面描述的两种方法之一传递对象 ID,然后在 post 上查询数据库。

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

    要将属性从视图传递到控制器,您有两种选择:

    • 网址参数
    • 隐藏字段

    网址参数

    <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)
    {
        ...
    }
    

    【讨论】:

    • 问题是ThatProperty是一个对象而不是像intstring这样的简单属性
    • 无法将对象从视图传递到控制器。如果是数据库对象,则可以传递对象的Id,在表单post上查询数据库。
    • 我明白了。谢谢你。我将只提取相关属性。
    猜你喜欢
    • 2014-06-12
    • 2013-11-20
    • 1970-01-01
    • 1970-01-01
    • 2013-07-08
    • 2015-05-06
    • 1970-01-01
    • 1970-01-01
    • 2015-10-06
    相关资源
    最近更新 更多