【发布时间】:2014-05-30 20:17:16
【问题描述】:
我不知道,这可能是个愚蠢的问题,但现在我试图找到解决这个问题的方法。即使视图中没有使用某些模型属性,我也需要将整个模型信息(数据)返回给控制器。但我需要它们进行控制器操作。例如 id、标签值。
示例
<div class="col-md-6">
@Html.LabelFor(model => model.AbstractTitleInEnglishLabel,
Model.AbstractTitleInEnglishLabel, new { @class = "control-label mandatory" })
</div>
从上面我第一次能够看到带有Abstract Title (in English) 之类的属性值的标签。提交给控制器后,我没有在控制器模型中获得该值。如果从控制器返回相同的视图。
我只能看到像 AbstractTitleInEnglishLabel 这样的属性名称,而不是它的值。这意味着属性的值在传递给控制器时不会存储在模型中。
[HttpPost]
public ActionResult Index(MeetingAbstract meetingAbstract)
{
if (!ModelState.IsValid)
{ // re-render the view when validation failed.
return View(meetingAbstract);
}
}
如何在不使用@Html.HiddenFor 的情况下处理这个问题?因为我有很多要展示的标签。
【问题讨论】:
-
将数据绑定到模型的唯一方法是使用可编辑字段(或 hiddenfor)。 displayfor 和 labelfor 不会将绑定到它们的值传递回控制器
-
@MattBody: 你能举个例子吗?
-
拥有一个可以(重新)获取服务器端数据的 ViewModel 会更好。
-
为了扩展@MattBodily 所说的内容,发送回控制器的唯一值是
<input>元素的形式,它们是HiddenFor和EditorFor生成的。LabelFor和DisplayFor不生成表单<input>元素 -
根据@jmoerdyk,您需要输入元素来处理您想要回发的任何内容。实现这一点的一个很好的简单方法(不必为您需要回发的每个属性写出 @Html.HiddenFor(model.PropertyName) )是装饰您想要发布但不想发布的所有属性在视图中可见,使用 HiddenInputAttribute 并将其与视图中的简单 EditorForModel html 帮助器结合使用,它将负责呈现所有必需的隐藏输入
标签: c# asp.net-mvc asp.net-mvc-4