我不知道,这可能是一个愚蠢的问题,但现在我试图找到解决这个问题的方法。我需要将整个模型信息(数据)返回给控制器,即使某些模型属性未在视图中使用。但我在控制器动作中需要它们。示例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
的情况下处理此问题?因为我有很多想要表演的标签。
答案 0 :(得分:0)
HttpPost操作会将您提供的任何属性放入meetingAbstract中。如果要将额外的属性传递回View,则必须从数据库中获取它们。这意味着您需要ID或其他东西来选择正确的行。如果您有ID,那么您可以
meetingAbstract = db.MeetingAbstracts.Find(meetingAbstract.id);
return View(meetingAbstract);
答案 1 :(得分:0)
Html.LabelFor不会创建将数据发布回控制器所需的输入控件。这让我想知道为什么你需要那些在post方法中。您是否考虑在post方法中使用UpdateModel方法,该方法将post中收到的属性应用于传递给此方法的对象,同时保持其他属性不变。因此,您可以从数据库中获取对象,并调用UpdateModel来更新返回的值。
如果情况并非如此,那么您将不得不生成hiddens来获取属性值。
答案 2 :(得分:0)
我认为,为了最好地理解您在问题中的需求,您可能需要在模型上添加数据注释。
using System;
using System.ComponentModel;
namespace MyProject.Models
{
public class MyModel
{
[DisplayName("Abstract Title")]
public string AbstractTitleInEnglish { get; set; }
}
}
数据注释([DisplayName(&#34; Abstract Title&#34;])将作为标签的显示文本。当您使用下面的帮助方法时,标签文本将显示为&#34;摘要标题&#34;无论发帖还是获得。
您必须使用这样的辅助方法:
@Html.LabelFor(model => model.AbstractTitleInEnglishLabel, new { @class = "control-label mandatory" })