使用Html.HiddenFor删除模型

时间:2018-03-22 18:57:19

标签: c# asp.net asp.net-mvc razor

每当我在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>
                    }

匹配的名称没有任何区别。

2 个答案:

答案 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" })

您正在设置idname = p,但实际上应该是removeStep.p

当表单回发ASP.NET时,会看到一个名为&#39; p&#39;的参数。用text =某事。因此,它会尝试在模型中查找属性p,并且它看到p实际上是PModel,但文本只是string而不是有效的json,所以它只是跳过了属性。因此模型是null

只需@Html.TextBoxFor(m => m.remvoveStep.p)即可解决问题