2011-02-10 2 views
0

ViewModel을 만들고 드롭 다운 목록을 바인딩 할 수 있도록 SelectListItem을 추가하려고합니다. 가 나는 값 = x.Product 문자열에 int 형으로 변환 캔트 불평 그러나이드롭 다운 목록을 바인딩 할 때 LINQ to Entities 오류

public class CreatePurchaseViewModel 
{ 
    public Product Product { get; set; } 
    public IEnumerable<SelectListItem> Products { get; set; } 
    public int SelectedProductId { get; set; } 
    public DateTime OrderDate { get; set; } 
    public bool OrderSent { get; set; } 

} 

내 컨트롤러가이

[HttpGet] 
    public ActionResult Create() 
    { 
     var model = new CreatePurchaseViewModel 
         { 
          Products = context.Products.Select(x => 
                 new SelectListItem() 
                  { 
                   Text = x.ProductName, 
                   Value = x.ProductID 
                  }) 
         }; 
     return View(model); 
    } 

모양과 같은 매우 기본적인 뷰 모델이있다. 따라서 .ToString을 추가해도 괜찮습니다. 그러나 뷰를로드하면 오류가 발생합니다.

LINQ to Entities는 'System.String ToString()'메서드를 인식하지 못합니다.이 메서드는 사용할 수 없습니다. 상점 식으로 변환됩니다.

내보기

@using (Html.BeginForm()) { 
@Html.ValidationSummary(true) 
<fieldset> 
    <legend>CreatePurchaseViewModel</legend> 

    <div class="editor-label"> 
     @Html.LabelFor(model => model.SelectedProductId) 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownListFor(x => x.SelectedProductId,Model.Products) 
     @Html.ValidationMessageFor(model => model.SelectedProductId) 
    </div> 
    <div class="editor-label"> 
     @Html.LabelFor(model => model.OrderDate) 
    </div> 
    <div class="editor-field"> 
     @Html.TextBoxFor(model=>model.OrderDate) 
     @Html.ValidationMessageFor(model => model.OrderDate) 
    </div> 
    <div> 
    Sent 
    @Html.RadioButtonFor(model => model.OrderSent, "Sent", new { @checked = true }) 
    Not Sent 
    @Html.RadioButtonFor(model=>model.OrderSent,"Not Sent") 

임 꽤 모두 엔티티 프레임 워크에 대한 새로운 MVC 그래서 어떤 도움도 좋은 것입니다.

당신은 당신의 제품 모델이 생겼 방법을 지정하지 않은 당신에게

답변

0

감사하지만, 우리는 당신이 문자열로 변환해야 할 수 있도록 ProductID 속성은 정수라고 가정 할 수 있습니다

[HttpGet] 
public ActionResult Create() 
{ 
    var model = new CreatePurchaseViewModel 
    { 
     Products = context.Products.Select(x => 
      new SelectListItem 
      { 
       Text = x.ProductName, 
       Value = x.ProductID.ToString() 
      } 
     ) 
    }; 
    return View(model); 
} 
+0

안녕 Darin 그러나 나는 여전히 오류가 발생했습니다. > LINQ to Entities는 'System.String ToString()'메서드를 인식하지 못하고이 메서드를 저장소 식으로 변환 할 수 없습니다. –

+0

@Diver Dan, 정확히이 오류가 발생합니까? 보기를 렌더링 할 때 또는 양식을 게시 할 때? –

+0

컨트롤러에 중단 점을 두었고 모델에 대해 반환 된 것을 살펴 봅니다. 제품에서 오류를 반환하는 것을 볼 수 있습니다. 컨트롤러에 Value = "1"을 하드 코딩하면 ok로 실행됩니다. –

관련 문제