为什么一个空模型返回post方法?

时间:2014-01-08 15:35:19

标签: c# asp.net-mvc-3

好的,已经发布了一个类似的问题,但我没有看到适用于这种情况的答案,或者更有可能,我完全理解答案!

基本上我有一个获取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>
}

3 个答案:

答案 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值集合,它将包含具有键Nameusername_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>
}