我尝试使用hiddenFor传递一些隐藏数据到我的控制器,我知道我想要获取的值,但是在提交表单后,该值到达控制器后仍为null。 EditorFor中的数据已正确传递到控制器。
// View
@using (Html.BeginForm())
{
@Html.AntiForgeryToken()
// Some working editorFor fields. Data from these gets successfully received
// The name is correctly displayed in the paragraph
<p>@Model.name</p>
// This data is not received in the controller
@Html.HiddenFor(x => x.name)
<div class="form-group">
<div class="col-md-offset-2 col-md-10">
<input type="submit" value="Create" class="btn btn-default" />
</div>
</div>
}
// Controller
[HttpPost]
[ValidateAntiForgeryToken]
public ActionResult Create(Product product, HttpPostedFileBase image)
{
product.name = "a name";
return View(product);
}
我也尝试过使用隐藏的普通名称,但这也没有返回值。
有人知道我错过了什么吗?
答案 0 :(得分:0)
如果您有表单,可以使用例如剃刀助手自动传递隐藏字段
@using (Html.BeginForm("CreateTable", "Home", FormMethod.Post, null){ @HiddenFor(i => i.PropertyName) }
并且隐藏字段必须在表单内部,否则您将“丢失”它们。
更新更新后的问题,:尝试删除HiddenField并更改<p>@Model.name</p>
到
@Html.LabelFor(i => i.Name)
答案 1 :(得分:0)
我确实专注于不正确的事情,问题是回发后我在控制器中更改了模型。但这只会更改模型,不会更改表单数据使用的ModelState。
//This is updated after model changes.
<p>@Model.name</p>
//For this you need to update the ModelState
@Html.HiddenFor(x => x.name)
在控制器中,您需要使用ModelState.Remove(属性名称)。 (或清除完整的ModelState)
//After removal of the property the ModelState will update to the new model value.
product.name = "a name";
ModelState.Remove("name");
return View(product);