为什么空模型返回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值集合,它将包含具有键Nameusername_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

上一篇: Why is an empty Model returning to post method?

下一篇: Posted ViewModel return null properties