我将订单列表传递给我的视图并在屏幕上显示:
@for (int i = 0; i < Model.AllOrders.Count; i++)
{
<text>
<tr>
<td width="15%">@Model.AllOrders[i].CustomerName</td>
<td width="15%">@Model.AllOrders[i].CustomerAddress</td>
<td width="15%">@Model.AllOrders[i].CustomerPhoneNumber</td>
<td width="15%">@Model.AllOrders[i].CustomerEmail</td>
<td width="15%">@Model.ModelBikeMapping[@Model.AllOrders[i].BicycleModel]</td>
<td width="15%">@Model.SizeMapping[@Model.AllOrders[i].BicycleSize]</td>
<td width="15%">@Model.ColourMapping[@Model.AllOrders[i].BicycleColour]</td>
<td width="15%">@Html.CheckBoxFor(x => @Model.AllOrders[i].Shipped)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].CustomerName)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].CustomerAddress)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].CustomerPhoneNumber)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].CustomerEmail)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].BicycleModel)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].BicycleSize)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].BicycleColour)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].Shipped)</td>
</tr>
</text>
}
</table>
<p>
<input type="submit" value="Update" />
</p>
在此处,用户可以选中或取消选中“已发货”复选框,然后单击“更新”,将新的“已发货”值传递回更新数据库表的控制器。 一切正常。但是,如果复选框为TRUE,我想禁用它,因为您只能运送一次项目。
iv尝试过:@if (@Model.AllOrders[i].Shipped)
{
<td width="15%">@Html.CheckBoxFor(x => @Model.AllOrders[i].Shipped, new { disabled = "disabled" })</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].Shipped)</td>
}
else
{
<td width="15%">@Html.CheckBoxFor(x => @Model.AllOrders[i].Shipped)</td>
<td width="15%">@Html.HiddenFor(item => Model.AllOrders[i].Shipped)</td>
}
这个问题是用户可以将新记录从未发货的[F]更新到发货[T]并且数据库更新正确但是所有现有的TRUE'发货'值都会被传回FALSE'unshipped'到控制器。这与我的逻辑或传递hiddenFor有关吗? 请指教
答案 0 :(得分:0)
我相信你的问题是模型绑定器与模型交互的方式。
根据我所看到的情况,我希望您的模型看起来像
public class ModelType
{
public List<Order> AllOrders {get; set;}
}
当您尝试在表单中循环并将其发布回服务器时,它会变得有点时髦。解决此问题的最快捷,最简单的方法是向模型中添加属性,然后将其作为表单中的隐藏字段。
public class ModelType
{
public List<Order> AllOrders {get; set;}
public int Id {get; set;}
}
然后将Id添加到表单中作为隐藏值。
我认为解决此问题的正确方法是使用Html.EditorFor,在其中删除for循环并将其替换为编辑器。我也遇到了编辑器的一些奇怪现象,主要是因为它希望从List中命名与T相同并且位于共享文件夹中。但我建议调查它,但是添加Id prop(或任何其他真正的)应该是一个快速解决方案。