如何将整个模型(带数据)从视图传递到控制器?

时间:2014-05-30 20:17:16

标签: c# asp.net-mvc asp.net-mvc-4

我不知道,这可能是一个愚蠢的问题,但现在我试图找到解决这个问题的方法。我需要将整个模型信息(数据)返回给控制器,即使某些模型属性未在视图中使用。但我在控制器动作中需要它们。示例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的情况下处理此问题?因为我有很多想要表演的标签。

3 个答案:

答案 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" })