每当我在Form Post中添加Html.Hidden表单时,它都会杀死模型中的所有数据。
模型 -
public class ViewRemoveStep
{
[HiddenInput]
public PModel p { get; set; }
[HiddenInput]
public RemoveStep remvoveStep { get; set; }
}
模型中的两个字段都是具有多个属性的模型。
查看 -
@using (Html.BeginForm("RemovePStep", "PFilter", FormMethod.Post, new { @class = "form-horozontal" }))
{
@Html.HiddenFor(m => m.p.LOB)
<div class="form-group">
@Html.TextBoxFor(m => m.remvoveStep.p, new { @id = "p", @name = "p", @type = "text", @placeholder = "P", @class = "form-control" })
</div>
<div class="form-group">
@Html.TextBoxFor(m => m.remvoveStep.RemovedStep, new { @id = "RemovedStep", @name = "RemovedStep", @type = "text", @placeholder = "Remove multiple eg.(1,2,3)", @class = "form-control" })
</div>
<button class="btn btn-danger col-md-offset-4 center-block">Remove</button>
}
ViewRemoveStep进入此视图,P已经填充,尝试从表单填充RemoveStep。无论如何将HiddenFor添加到表单中,它都会向控制器发布一个完全为空的模型。甚至表单中两个可键入字段的字段也为空。取出隐藏的部分并删除正确的removestep字段,但危险就像你期望的那样为空。
即使我在模型上的字符串上使用HiddenFor,它仍然返回所有null。这就像使用HiddenFor无论如何都会杀死整个模型。
我无法弄清楚原因。
修改
我现在已经看过两次相同类型的响应,但它似乎没有帮助。我把我的东西改成了这个
@using (Html.BeginForm("RemovePerilStep", "PerilFilter", FormMethod.Post, new { @class = "form-horozontal" }))
{
<div class="form-group">
@Html.TextBoxFor(m => m.removeStep.peril, new { @id = "removeStep.peril", @name = "removeStep.peril", @type = "text", @placeholder = "Peril", @class = "form-control" })
</div>
<div class="form-group">
@Html.TextBoxFor(m => m.removeStep.RemovedStep, new { @id = "removeStep.RemovedStep", @name = "removedStep.RemovedStep", @type = "text", @placeholder = "Remove multiple eg.(1,2,3)", @class = "form-control" })
</div>
@Html.HiddenFor(m => m.peril, new { @id = "peril", @name = "peril" })
<button class="btn btn-danger col-md-offset-4 center-block">Remove</button>
}
匹配的名称没有任何区别。
答案 0 :(得分:0)
您必须使DOM字段的名称与您的控制器等待的模型的属性匹配。
实际上,您的输入字段为@name = "RemovedStep"
且与模型不匹配。
在您的模型中,您public RemoveStep remvoveStep { get; set; }
的姓名为@name = "remvoveStep.fieldName"
如果您没有指定名称,则使用匹配良好的名称生成名称。
答案 1 :(得分:0)
@Html.TextBoxFor(m => m.remvoveStep.p, new { @id = "p", @name = "p", @type = "text", @placeholder = "P", @class = "form-control" })
您正在设置id
和name = p
,但实际上应该是removeStep.p
当表单回发ASP.NET时,会看到一个名为&#39; p
&#39;的参数。用text =某事。因此,它会尝试在模型中查找属性p,并且它看到p
实际上是PModel
,但文本只是string
而不是有效的json,所以它只是跳过了属性。因此模型是null
。
只需@Html.TextBoxFor(m => m.remvoveStep.p)
即可解决问题