gpt4 book ai didi

c# - 如何在模型中填充集合的属性

转载 作者:太空宇宙 更新时间:2023-11-03 12:28:24 24 4
gpt4 key购买 nike

我有一个模型,Sample其中包含 List<QCItem> ,它在构造函数中填充。

在我的 Sample.Create.cshtml表单,我有以下部分,用于填充 Mass List<QCItem> 中每一项的值在模型中:

@for (var itemCnt = 0; itemCnt < Model.Defects.Count(); itemCnt++)
{
@Html.LabelFor(m => Model.Defects[itemCnt], Model.Defects[itemCnt].Criteria)
@Html.HiddenFor(m => Model.Defects[itemCnt].Criteria,
new { @value = Model.Defects[itemCnt].Criteria })

@Html.TextBoxFor(m => Model.Defects[itemCnt].Mass)
@Html.HiddenFor(m => Model.Defects[itemCnt].Mass)
}

调试时,我可以看到 Model.Defects 中的每一项在 Model 的 Controller 中包含 Mass我在 TextBoxFor 中输入的值,并且每个文本框旁边都有正确的标签。

但是,我还需要这些QCItem我们有 Criteria已分配,这就是我添加 HiddenFor 的原因上面的字段,但是当调试器命中 Controller 时,每个 QCItem s 有一个 Criteria null 的值.

如何以与 Mass 相同的方式将此值传递给 Controller ​​操作正在通过? (它应该自动分配给正确的 QCItem )该值肯定存在,因为它显示在 LabelFor 中.

更新

这是 SampleController 中的方法:

public ActionResult Insert(HttpPostedFileBase file, Sample sample)
{
SelectedPallet = (Pallet)Session["pallet"];
sample.Pallet = SelectedPallet;

var access = new Access();
access.InsertNewQCSample(sample);

var files = Request.Files;
// Insert into database

return View("Details");
}

这是 Sample具有所有属性的模型:

public class Sample : IGriddable
{
private DataRow dataRow;
private DataRow row;

public string[] ColumnHeaders { get; } = new string[] { "SampleNumber", "Date", "ClerkStatus", "SupervisorStatus" };
public string RowLinkPrefix { get { return $"/receiving/{Pallet.Grv.GrvNumber}/{Pallet.PalletSequence}/"; } }
public bool Selectable { get; } = true;

public Pallet Pallet { get; set; }
public string Clerk { get; set; }
public string MassOff { get; set; }
public string ProductionComment { get; set; }
public string Quantity { get; set; }
public string Supervisor { get; set; }
public string TechnicalComment { get; set; }

public string SampleNumber { get; set; }
public string ClerkStatus { get; set; }
public DateTime Date { get; set; }
public string SupervisorStatus { get; set; }

public string ProductSpec { get; set; }

// Each defect status needs to be saved as a (DB)subQCItems item
public List<QCItem> Defects { get; set; } = new List<QCItem>();
public List<string> ImagePaths { get; set; } = new List<string>();
}

这是 QCItem型号:

public class QCItem : IGriddable
{
public string[] ColumnHeaders { get; } = new string[] { "Criteria", "Major", "Mass" };
public string RowLinkPrefix { get; } = string.Empty;
public bool Selectable { get; } = false;

public string Criteria { get; internal set; }
public bool Major { get; set; }
public int Mass { get; set; }

public Sample Sample;
}

最佳答案

你已经给了你的 Criteria 属性和 internal setter 而 DefaultModelBinder 不能设置它(它需要是 public)

public string Criteria { get; set; }

旁注:

您的 LabelFor() 方法没有将标签与文本框相关联(点击它不会设置焦点。它需要

@Html.LabelFor(m => Model.Defects[itemCnt].Mass, Model.Defects[itemCnt].Criteria)

Criteria 的隐藏输入应该是

@Html.HiddenFor(m => Model.Defects[itemCnt].Criteria)

Mass 的隐藏输入毫无意义,它的值将被 DefaultModelBinder 忽略,因为您有一个 TextBoxFor()隐藏输入前的属性

关于c# - 如何在模型中填充集合的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43716959/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com