为什么空模型返回post方法?
好的,一个类似的问题已经发布,但我没有看到一个适用于这种情况的答案,或者更可能的,我完全理解答案!
基本上我有一个获得ViewResult和Post ActionResult,获取返回正确的模型,但提交时,模型返回所有属性为空? 有其他方法用户类似的代码,它的工作原理,任何人都可以看到问题? 仍在学习,所以请解释任何答案,谢谢。
[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>
}
表单从其输入中提交值。 您没有名称与模型属性名称相同的输入,因此提交的表单数据不包含这些值。 其他值提供者(查询字符串,路由数据等)也没有对应于模型属性的值。 因此,模型联编程序无法绑定值,并且您的模型的所有属性都等于null
(它们是引用类型属性)。
您可以使用@Michael建议的@ Html.HiddenFor(m => m.Name)`来在您的表单中生成隐藏的输入:
<input id="Name" type="hidden" value="username_value" name="Name">
现在,如果您要检查Request.Form
值集合,它将包含具有键Name
和username_value
值的条目。 FormValueProvider
提供对这个集合的访问来建模binder。 名称为Name
属性将被成功绑定。
您将获得一个空模型,因为表单中模型上的属性没有input
控件。 即使DisplayFor
也不会在POST
发回一个值。 我会建议这样做:
@Html.HiddenFor(m => m.Property1)
@Html.HiddenFor(m => m.Property2)
@Html.HiddenFor(m => m.Property3)
...
其中Property{n}
是模型上的属性。
您需要在表单部分有一个表单输入元素,以便浏览器可以回发到服务器。 更新您的代码并添加以下属性
@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>
}
链接地址: http://www.djcxy.com/p/53967.html