好的,已经发布了一个类似的问题,但我没有看到适用于这种情况的答案,或者更有可能,我完全理解答案!
基本上我有一个获取ViewResult和Post ActionResult,Get返回正确的模型但是在提交时,模型将所有属性返回为null? 用户在其他方法中使用类似的代码并且有效,任何人都可以看到问题吗? 还在学习,所以请解释任何答案,谢谢。
[HttpGet]
public ViewResult DeleteUser(string username)
{
IQueryRunner<User> getUser = new NhQueryRunner<User>();
User user = getUser.GetQueryResult(new GetNamedEntity<User>(username));
ViewUserModel model = Mapper.Map<User, ViewUserModel>(user);
return View("DeleteUser", model);
}
[HttpPost]
public ActionResult DeleteUser(ViewUserModel model)
{
}
查看
@using (Html.BeginForm("DeleteUser", "Company", FormMethod.Post))
{
<fieldset>
Are you sure you want to delete Username - @Html.DisplayFor(m => m.Name)
<input type="submit" value="Remove User"/>
</fieldset>
}
答案 0 :(得分:2)
您将获得一个空模型,因为表单中模型的属性没有input
控件。即使DisplayFor
也不会在POST
中发回值。我建议这样做:
@Html.HiddenFor(m => m.Property1)
@Html.HiddenFor(m => m.Property2)
@Html.HiddenFor(m => m.Property3)
...
其中Property{n}
是模型上的属性。
答案 1 :(得分:1)
表单从其输入中提交值。您没有名称等于模型属性名称的输入,因此提交的表单数据不包含这些值。其他value providers(查询字符串,路由数据等)也没有与模型属性对应的值。因此,模型绑定器不能绑定值,并且模型的所有属性都等于null
(它们是引用类型属性)。
您可以使用@Michael建议的@ Html.HiddenFor(m =&gt; m.Name)`来生成表单中的隐藏输入:
<input id="Name" type="hidden" value="username_value" name="Name">
现在,如果您要检查Request.Form
值集合,它将包含具有键Name
和username_value
值的条目。 FormValueProvider
提供对此集合的访问以模拟绑定器。名为Name
的属性将成功绑定。
答案 2 :(得分:1)
您需要在表单部分中有一个表单输入元素,以便浏览器可以回发到服务器。更新您的代码并添加以下属性
@using (Html.BeginForm("DeleteUser", "Company", FormMethod.Post))
{
<fieldset>
Are you sure you want to delete Username - @Html.DisplayFor(m => m.Name)
@Html.HiddenFor(x=>x.Name)
<input type="submit" value="Remove User"/>
</fieldset>
}