从外表显示信息到视图

时间:2016-05-17 13:02:54

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

在我看来,我正在使用:

@model ALSummary.Models.MRecord

MRecord有一个名为ACID的属性,其中包含另一个名为ACInfo的表的主键。

现在我的MRecord模型是:

public partial class MRecord
{
    public int ID { get; set; }

    public System.DateTime DateEntered { get; set; }

    public int ACID { get; set; }

    public virtual ACInfo ACInfo { get; set; }
}

MRecord创建视图中,我想显示ACID表中的另一条信息,而不是显示ACInfo

原来的观点是:

<div class="form-group">
    @Html.LabelFor(model => model.ACID, "ACID", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.ACID, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.ACID, "", new { @class = "text-danger" })
    </div>
</div>

但是我希望通过这样做来显示与ACID对应的另一条信息:

<div class="form-group">
    @Html.LabelFor(model => model.ACID, "ACID", htmlAttributes: new { @class = "control-label col-md-2" })
    <div class="col-md-10">
        @Html.EditorFor(model => model.ACInfo.RegNum, new { htmlAttributes = new { @class = "form-control" } })
        @Html.ValidationMessageFor(model => model.ACID, "", new { @class = "text-danger" })
    </div>
</div>

在我的HttpGet Create ActionResult我创建了MRecord的新实例,仅供参考:

public ActionResult Create(int? id)
{
    MRecord newMRecord = new MRecord();
    DateTime yesterday = DateTime.Today.AddDays(-1);
    newMRecord.DateEntered = DateTime.Today.Date;

   return View(newMRecord);
}

ACIDint的{​​{1}}如何等于RegNum类型string?还是不可能?

1 个答案:

答案 0 :(得分:0)

您需要使用视图模型。它使处理情况像这样微不足道。基本上,您只需创建一个包含要在其上编辑的所有属性的类:

public class MRecordViewModel
{
    public string ACInfoRegNum { get; set; }
}

然后,您只需在控制器操作中映射到此视图模型。例如:

var model = new MRecordViewModel
{
    ACInfoRegNum = mrecord.ACInfo.RegNum
};

但是,不太清楚(以及您需要确定的内容)是您希望如何处理发布值。是应该更改RegNum更新现有ACInfo还是创建新的ACInfo?那么,如果RegNum已经存在ACInfo,该怎么办?您是应该附加现有的ACID实例还是仍然创建一个新实例?如果您想要更新,那么您还需要传递ACInfo,这样您就可以获取现有的MRecord实例并进行更新。如果您愿意,可以使用隐藏字段,或者只需查询ACInfo新帖子并从那里获取RegNum实例(这可能更好)。如果您想创建一个新的,并且您不想要重复的ACInfoRegNum,那么您需要使用为MRecord发布的值进行查询,然后将该实例附加到您的{{1}实例代替。