MVC剃刀帖子模型为空

时间:2015-01-26 23:05:46

标签: c# asp.net-mvc-4 razor

可能遗漏了一些明显的东西,但我发布到控制器的模型总是为空的...模型正确地传递给视图,我可以访问属性,但是在提交表单时,模型为空。为什么呢?

...模型

public class ProfileModel
{

    public MembershipUser user { get; set; }
    public ProfileSettingsModel settings { get; set; }


}

...控制器

    [HttpPost]
    public ActionResult SaveSettings(ProfileModel model)
    {
        var x = model.user.UserName;
        return View();
    }

查看...

 @model MyApp.Models.Profile.ProfileModel

 @using(Html.BeginForm("SaveSettings","Profile"))
    {

        //Tried removing these as I shouldn't need them, but no luck.
        @Html.HiddenFor(x=>x.settings)
        @Html.HiddenFor(x=>x.user)

        @Html.CheckBoxFor(model=>model.settings.VisitorsCanAddMeAsFriend)
        @Html.LabelFor(x=>x.settings.VisitorsCanAddMeAsFriend, "Visitors can add me as a friend")
        @Html.CheckBoxFor(x=>x.settings.VisitorsCanMessageMe)
        @Html.LabelFor(x=>x.settings.VisitorsCanMessageMe, "Visitors can message me")

         <button id="save" type="submit" class="btn btn-default">Save</button>

     }

呈现HTML ...

<form action="/Profile/SaveSettings?HttpMethod=POST&amp;InsertionMode=Replace&amp;LoadingElementDuration=0&amp;AllowCache=False" method="post" novalidate="novalidate">
    <input data-val="true" data-val-required="The VisitorsCanAddMeAsFriend field is required." id="settings_VisitorsCanAddMeAsFriend" name="settings.VisitorsCanAddMeAsFriend" type="checkbox" value="true">
    <input name="settings.VisitorsCanAddMeAsFriend" type="hidden" value="false">
    <label for="settings_VisitorsCanAddMeAsFriend">Visitors can add me as a friend</label>
    <input data-val="true" data-val-required="The VisitorsCanMessageMe field is required." id="settings_VisitorsCanMessageMe" name="settings.VisitorsCanMessageMe" type="checkbox" value="true">
    <input name="settings.VisitorsCanMessageMe" type="hidden" value="false">
    <label for="settings_VisitorsCanMessageMe">Visitors can message me</label>                 
    <button id="save" type="submit" class="btn btn-default">Save</button>
</form>

有什么明显的吗?

4 个答案:

答案 0 :(得分:2)

更改

@Html.HiddenFor(x=>x.settings)
@Html.HiddenFor(x=>x.user)

@Html.HiddenFor(x => x.user.UserName)

默认的活页夹至少应该选择那个。

答案 1 :(得分:2)

您不能在模型绑定中使用MembershipUser。模型绑定要求所有属性都具有公共无参数构造函数,并且MembershipUser的无参数构造函数受到保护。因此,您无法直接使用它。您需要创建自己的视图模型来传递属性。

因此,删除设置和用户HiddenFor,然后直接将这些属性绑定将获得您想要的。

答案 2 :(得分:0)

我认为你不能做html.hiddenfor(复杂类型),因为值必须表示为字符串。在你的渲染html中你可以看到,然后两个HiddenFor没有呈现为输入类型='隐藏'..... /

所以是的,明显的错误是两个html.hiddenfor。您需要在帖子

中执行HiddenFor或您希望收到的每个属性

答案 3 :(得分:0)

在控制器的回发方法中,最后一行显示

return View();

但应该说

return View(model);

否则你没有将模型传回页面。