我的表单包含少量输入,name
,email
,message
和一些checkboxes
。我已经为这些输入创建了一个模型,并设置了我需要的所有验证。
但现在我也希望将模型(即@model MyModel
)或模型的某些对象属性与这些输入一起传递。
用我的模型填充VewBag/viewData
是一种方法吗?
@{
ViewBag.MyModel = Model;
// or ViewBag.ThatProperty = Model.ThatProperty
}
或者我还有更好的方法吗?
答案 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)
{
...
}