2015-01-13 2 views
0

Интересно, почему я получаю нулевую модель, проходящую от представления к контроллеру.ASP MVC4 нулевая модель передана в действие в контроллере

Вот мой код в представлении (UpdatePersonal.cshtml):

@model Project.Models.UserInfo 

@using (Html.BeginForm()){ 
    @Html.LabelFor(m => m.userinfo.firstname); 
    @Html.TextBoxFor(m => m.userinfo.firstname, new { @Value = ViewBag.Firstname }); 

    @Html.LabelFor(m => m.userinfo.lastname); 
    @Html.TextBoxFor(m => m.userinfo.lastname, new { @Value = ViewBag.Lastname }); 

    @Html.LabelFor(m => m.userinfo.email); 
    @Html.TextBoxFor(m => m.userinfo.email, new { @Value = ViewBag.Email }); 

    @Html.LabelFor(m => m.userinfo.phone); 
    @Html.TextBoxFor(m => m.userinfo.phone, new { @Value = ViewBag.Phone }); 

    @Html.HiddenFor(m => m.username, new { @Value = ViewBag.Username }); 

    <input type="submit" value="Submit" />} 

Вот метод действия, который принимает его:

[HttpPost] 
[AllowAnonymous] 
public ActionResult UpdatePersonal(UserInfo userInfo){ 
    //some code here 
    //my breakpoint} 

я вижу модель передается имеет нулевое значение, я использовал точки останова

моя модель:

public class UserInfo 
{ 
    [BsonId] 
    public string username { get; set; } 
    public Info userinfo { get; set; } 
    public Address address { get; set; } 


    public class Info 
    { 
     public string firstname { get; set; } 
     public string lastname { get; set; } 
     public string email { get; set; } 
     public string phone { get; set; } 
    } 

    public class Address 
    { 
     public string street { get; set; } 
     public string address1 { get; set; } 
     public string address2 { get; set; } 
     public string postalcode { get; set; } 
     public string country { get; set; } 
    } 
} 
+0

Ваше действие украшено '[HttpPost]'? – Jonesopolis

+0

Да, у меня есть [HttpPost] в действии –

+0

Как выглядит ваша модель? – beautifulcoder

ответ

0

я просто решить мою проблему, вместо того, чтобы я использовал и передать подкласс

@model Buch_Ankauf.Models.UserInfo.Info 

@using (Html.BeginForm()){ 

@Html.LabelFor(m => m.firstname); 
@Html.TextBoxFor(m => m.firstname, new { @Value = ViewBag.Firstname }); 

@Html.LabelFor(m => m.lastname); 
@Html.TextBoxFor(m => m.lastname, new { @Value = ViewBag.Lastname }); 

@Html.LabelFor(m => m.email); 
@Html.TextBoxFor(m => m.email, new { @Value = ViewBag.Email }); 

@Html.LabelFor(m => m.phone); 
@Html.TextBoxFor(m => m.phone, new { @Value = ViewBag.Phone }); 

@Html.Hidden("username", new { @Value = ViewBag.Username }); 

<input type="submit" value="Submit" />} 

в моем контроллере:

[HttpPost] 
    [AllowAnonymous] 
    public ActionResult UpdatePersonal(UserInfo.Info userInfo) 
    { 
+0

Ответ jbbi - правильное решение. Вы не можете назвать параметр метода POST с тем же именем, что и одно из ваших свойств модели. И как указано в комментариях - НЕ пытайтесь переопределить атрибут value, используя 'new {@Value = ViewBag.someValue}' –

2

Вы работаете вокруг этой проблемы, но ваш первый код был хорош, единственной проблемой была имя вашего параметра метода действия было таким же, как имя вашего свойства модели.

Изменить метод действия подписи, например,:

public ActionResult UpdatePersonal(UserInfo info) 

и она должна быть работа!

+0

привет, я попробовал ваше предложение, но то же самое происходит. Все еще null. –

+0

можете ли вы поместить свой обновленный код? – binard

Смежные вопросы