2012-10-31 2 views
0

컨트롤러 :모델 표현을 위해 작동하지 않는 X => x.InputModel.PropertyName

public class HomeController : Controller 
{ 
    public ActionResult Index() 
    { 
     var myViewModel = new CreateFavoriteListViewModel(); 
     var favoriteTypeDropdownList = new List<SelectListItem>(); 
     favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text1", Value = "1" }); 
     favoriteTypeDropdownList.Add(new SelectListItem { Text = "Text2", Value = "2" }); 

     myViewModel.FavoriteTypeDropdownList = favoriteTypeDropdownList; 
     return View(myViewModel); 
    } 

    [HttpPost] 
    public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel) 
    { 
     return new EmptyResult(); 
    } 
} 

모델 :

public class CreateFavoriteListViewModel 
{ 
    public CreateFavoriteListInputModel CreateFavoriteListInputModel { get; set; } 
    public List<SelectListItem> FavoriteTypeDropdownList { get; set; } 
} 

public class CreateFavoriteListInputModel 
{ 
    [Required] 
    public string ListName { get; set; } 
    public int SelectedFavoriteType { get; set; } 
} 

보기 :

@model MvcApplication3.Controllers.CreateFavoriteListViewModel 
<h2>title</h2> 

@using (Html.BeginForm("Post", "Home", FormMethod.Post)) 
{ 
    @Html.LabelFor(x => x.CreateFavoriteListInputModel.ListName) 
    @Html.TextBoxFor(x => x.CreateFavoriteListInputModel.ListName) 

    @Html.LabelFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType) 
    @Html.DropDownListFor(x => x.CreateFavoriteListInputModel.SelectedFavoriteType, Model.FavoriteTypeDropdownList) 
    <input type="submit" value="Save" id="btnCreateList" name="btnCreateList" /> 
} 

A 당신은 특별한 lambda 표현식을 가진 입력 모델을 사용하는 것을 볼 수 있습니다. (x=>x.CreateFavoriteListInputModel.ListName). 이상한 문제는 이것이 내 집 컴퓨터에서 작동하지만 내 회사에서는 작동하지 않는다는 것입니다 (createFavoriteListInputModel = Null). ASP.NET MVC4 또는 그와 비슷한 버전이 여러 개있는 것 같습니다.

아마도 이런 종류의 모델 바인딩이 ASP.NET MVC에서 지원되었을 때부터 누군가가 알고 있습니다.

내 코드가 효과가 있습니까?

뷰 모델과 lamba 표현식을 x=>x.ListName으로 변경하면 두 컴퓨터에서 모두 작동합니다.

답변

0

에 전달했다. 문제는 여기에 있습니다 : 내 회사에

[HttpPost] 
public ActionResult Post(CreateFavoriteListInputModel createFavoriteListInputModel) 
{ 
    return new EmptyResult(); // DOES WORK 
} 

기계 내가 이런 일을했다 :

[HttpPost] 
public ActionResult Post(CreateFavoriteListInputModel inputModel) 
{ 
    return new EmptyResult(); // DOES NOT WORK 
} 

매개 변수 이름은 복잡한 객체의 이름과 같은 동일해야 CreateFavoriteListInputModel (대소 문자 구분) .

POST 매개 변수 :

  • CreateFavoriteListInputModel.ListName = TestList
  • CreateFavoriteListInputModel.SelectedFavoriteType = 1
  • btnCreateList = 저장

은 내가 이해할 수없는 것은 왜 매개 변수 이름이 중요합니까? 기본 유형의 경우 이는 분명하지만 복잡한 유형의 경우 얻을 수 없습니다.

0

페이지로 전달한 모델과 컨트롤러에 전달한 모델의 차이점이 있다고 생각합니다.

@model MvcApplication3.Controllers.CreateFavoriteListViewModel <-- was passed to the page 

하지만 CreateFavoriteListInputModel

내가 문제를 발견 컨트롤러 포스트 액션

+0

물론 다릅니다. 내 게시 작업에 null 속성 값 (FavoriteTypeDropdownList)을 전달해야하는 이유는 무엇입니까? – Rookian

+0

아마도 잘못 되었나요? 내 말은 그들이 같은 경우가 아니라는 것이다. 두 클래스 모두 같은 클래스의 인스턴스 여야한다고 생각합니다. 'CreateFavoriteListViewModel'과'CreateFavoriteListInputModel'은 같지 않습니다 – codingbiz

+0

'x => x.ListName'을 사용하면 작동합니까?왜냐하면'x'는 액션이 ​​기대했던 Model의 인스턴스입니다.'x'는'CreateFavoriteListInputModel'입니다. – codingbiz