C# 使用Html.HiddenFor删除模型中的所有数据

C# 使用Html.HiddenFor删除模型中的所有数据,c#,asp.net,asp.net-mvc,razor,C#,Asp.net,Asp.net Mvc,Razor,每当我在表单Post中添加Html.Hidden表单时,它就会删除模型中的所有数据 模型- public class ViewRemoveStep { [HiddenInput] public PModel p { get; set; } [HiddenInput] public RemoveStep remvoveStep { get; set; } } 模型中的两个字段都是具有多个属性的模型 视图- @using (Html.BeginForm("Remov

每当我在表单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>
}
@使用(Html.BeginForm(“RemovePStep”、“PFilter”、FormMethod.Post、new{@class=“form horozontal”}))
{
@Html.HiddenFor(m=>m.p.LOB)
@Html.TextBoxFor(m=>m.remvoveStep.p,新的{@id=“p”、@name=“p”、@type=“text”、@placeholder=“p”、@class=“form control”})
@Html.TextBoxFor(m=>m.remvoveStep.RemovedStep,new{@id=“RemovedStep”、@name=“RemovedStep”、@type=“text”、@placeholder=“Remove multiple eg.(1,2,3)”、@class=“form control”})
去除
}
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>
                    }
@使用(Html.BeginForm(“RemovePerilStep”、“PerilFilter”、FormMethod.Post、new{@class=“form horozontal”}))
{
@Html.TextBoxFor(m=>m.removeStep.perior,新的{@id=“removeStep.perior”、@name=“removeStep.perior”、@type=“text”、@placeholder=“perior”、@class=“form control”})
@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”})
@HiddenFor(m=>m.peril,新的{@id=“peril”,@name=“peril”})
去除
}

匹配的名字没有任何区别

必须使DOM字段的名称与控制器等待的模型的属性相匹配

实际上,您的输入字段具有
@name=“RemovedStep”
,并且与模型不匹配

在您的模型中,您有
public RemoveStep remvoveStep{get;set;}
您的名字类似于
@name=“remvoveStep.fieldName”

如果未指定名称,则会使用匹配良好的名称生成该名称

@Html.TextBoxFor(m => m.remvoveStep.p, new { @id = "p", @name = "p", @type = "text", @placeholder = "P", @class = "form-control" })
您正在设置
id
name=p
,但实际上它应该是
removeStep.p

当表单post back ASP.NET看到一个名为“
p
”的参数,其中text=something。因此,它尝试在模型中查找属性p,发现
p
实际上是一个
PModel
,但文本只是一个
字符串,而不是一个有效的json,因此它跳过了该属性。因此,模型为
null


只要做
@Html.TextBoxFor(m=>m.remvoveStep.p)
就可以解决问题了

我刚才试过你说的。我更改了@names以匹配属性。没有变化,仍然是一个空模型。是的。这纯粹是基于HiddenFor在那里这一事实。去掉hiddenFor,两个字段将正确绑定。添加HiddenFor,视图模型中的两个模型都将完全为空。我尝试了您的示例,但没有任何区别。我在编辑中添加了您的建议。@MartinMcfry删除所有
@id
@class
,然后从
TextBoxFor()
中删除您的
新的{@id=“p”、@name=“p”、@type=“text”}
,重新开始。在任何情况下,您都不会尝试更改
name
属性(在您的情况下,无论如何它都不会做任何事情-幸运的是),并且该方法已经添加了正确的
id
属性和
type=“text”
属性,但您甚至没有显示控制器方法(这显然是错误的)因此,这个问题目前无法回答。在问题中显示相关代码。