在我的代码中,我无法读取表单帖子上的嵌套对象值。
在一个对象中编辑List属性的Wrog方法:
@{
var contatore = 0;
foreach (var item in Model.Movimenti)
{
var movimento = item;
<tr>
<td align="left">
@*Imposto gli Hidden per tutte le proprietà che devo recuperare al post*@
@Html.HiddenFor(x => movimento.Prodotto.Descrizione, "Movimenti[" + contatore + "].Prodotto.Descrizione")
@Html.DisplayFor(x => movimento.Prodotto.Descrizione, "Movimenti[" + contatore + "].Prodotto.Descrizione")
</td>
<td>@Html.EditorFor(x => movimento.Aum, "CurrencyDisabled", "Movimenti[" + contatore + "].AUM")</td>
</tr>
contatore++;
}
}
这是在一个对象中编辑List属性的正确方法:
代码:
@using AI.Business.Models
@model Operazione
@{ ViewBag.Title = "Simulatore"; }
@using (Html.BeginForm("CreaOperazione", "Operativita", FormMethod.Post))
{
// Imposto gli Hidden per tutte le proprietà che devo recuperare al post
@Html.HiddenFor(x => x.RapportoModel.TipoRapportoId)
<table width="100%" class="display" id="Simulatore" cellspacing="0">
<thead>
<tr>
<th class="dt-head-left">Linea</th>
<th>AUM</th>
</tr>
</thead>
<tbody>
@Html.EditorFor(x => x.Movimenti)
</tbody>
</table>
<button id="btnSalva" name="btnSalva" type="submit" style="float: right;">Salva Operazione</button>
}
编辑推荐:
@model AI.Business.Models.Movimento
<tr>
<td align="left">
@Html.HiddenFor(x => x.Prodotto.Descrizione)
@Html.DisplayFor(x => x.Prodotto.Descrizione)</td>
<td>@Html.EditorFor(x => x.Aum, "CurrencyDisabled")</td>
这是我的目标:
public class Movimento
{
public int Id { get; set; }
public ProdottoModel Prodotto { get; set; }
public decimal Aum { get; set; }
}
对象产品:
public class ProdottoModel
{
[Key]
public int ID { get; set; }
public string Descrizione { get; set; }
}
在我的Actionresult中,Descrizione属性为null:
[HttpPost]
public ActionResult CreaOperazione(Operazione operazione)
{
if (ModelState.IsValid)
{
// Do something
}
else
ImpostaErrore(ModelState);
return View("PaginaSimulatore", operazione);
}
打开图像:
At my first access to the page the property Prodotto.Descrizione is populated
When i raise the form post event this property was sent with a null value
答案 0 :(得分:1)
我不确定你是如何让这一切发挥作用的,但这完全是侥幸。例如,HiddenFor
没有参数可以让您指定字段的名称值。相反,在您尝试这样做的地方,该参数实际上是htmlAttributes
的参数,它需要匿名对象或IDictionary
。您没有收到错误的唯一原因是因为string
在技术上是object
,但在此上下文中它永远不会做任何事情。
其他助手调用也是如此。特别是EditorFor
,您传递"CurrencyDisabled"
的第二个参数用于指定应使用的编辑器模板,第三个参数用于additionalViewData
,其中只需在编辑器模板的上下文中将项目附加到ViewData
。
无论多么短暂,这一切都不会影响你的想法。简单而言,如果您需要使用集合,则需要使用for
而不是foreach
。传递给*For
系列助手的表达式不仅仅是识别属性,而是可以实现它;它必须是可绑定的表达式,即Razor可以用来为表单字段创建一个名称,该名称将在帖子上排列到模型上的某些内容。为了实现这一点,名称必须类似Movimenti[N].Prodotto.Descrizione
,并且唯一的方法是调用助手,如:
@Html.HiddenFor(m => m.Movimenti[i].Prodotto.Descrizione)
i
将是for
循环中的迭代器。