【问题标题】:ASP.Net MVC - model with collection, SubmitASP.Net MVC - 带有集合的模型,提交
【发布时间】:2013-01-28 13:49:03
【问题描述】:

我有一个看起来像的模型

public class Patient
{
    private ICollection<Refill> _refills = new List<Refill>();
    public int Id { get; set; }
    public string FirstName { get; set; }
                  
    public virtual ICollection<Refill> Refills
    {
        get { return _refills; }
        set { _refills = value; }
    }
}

public class Refill
{
    public int Id { get; set; }

    public RefillActivityStatus RefillActivityStatus { get; set; }
    public DateTime? RefillDate { get; set; }
    public RefillType RefillType { get; set; }
    public string RXNumber { get; set; }
}

这就是我想要做的。我想在视图中填充这些,当用户单击保存更改时。我想保存实体框架。我遇到的问题是在我这样做的视图中

@foreach (var m in Model.Refills)
{
     @Html.HiddenFor(model=>m.Id)
     <div class="editor-label">
         @Html.LabelFor(model => m.RXNumber)
     </div>
     <div class="editor-field">
         @Html.EditorFor(model => m.RXNumber)                                  
     </div>     
}

我试图在控制器中做这样的事情

[HttpPost]
public ActionResult Details(Patient patient)
{
    Patient p = db.Patients.Find(patient.Id);
    db.Entry(p).State = EntityState.Modified;
    db.Entry(p).CurrentValues.SetValues(patient);
    // Would include Refill changes too but it doesn't
    db.SaveChanges();

    return View(p);
}

但是,Refills 不会在 HttpPost 上传播。它只是空的,我需要做什么来修复它?

【问题讨论】:

  • 能否请您显示允许用户输入值的表单代码?

标签: c# asp.net-mvc entity-framework


【解决方案1】:

试试你的foreach

@for (int i = 0; i < Model.Refills.Count(); i++)
{
    @Html.Hidden("Refills[" + i + "].Id", Model.Refills[i].Id)
    <div class="editor-label">
        @Html.Label("Refills[" + i + "].RXNumber", Model.Refills[i].RXNumber)
    </div>
    <div class="editor-field">
        @Html.Editor("Refills[" + i + "].RXNumber")
    </div>     
}

【讨论】:

  • 我正在获取方法 'System.Web.Mvc.Html.LabelExtensions.LabelFor(System.Web.Mvc.HtmlHelper, System.Linq.Expressions. Expression>, string)' 无法从用法中推断出来。尝试明确指定类型参数。对于 LabelFor
  • 因为您需要将值映射为Refills[ix].RXNumber(将其设置为名称),另一方面,您正在使用创建名称为@ 的输入的帮助器(EditorFor) 987654325@,这是错误的(必须是Refills[i].RXNumber才能正确映射)
  • 好的,谢谢,但我还发现您仍然可以使用@Html.EditorFor(model => Model.Refills[i].RXNumber) 而无需手动创建字符串。
猜你喜欢
  • 2012-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-02-10
  • 1970-01-01
  • 2013-03-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多