2010-08-10 2 views
1

안녕하세요, 어떻게 최선의 방법으로 최선을 다하고 있습니다. 제 경우에는 제품이 있고 제조업체 객체가 있습니다.다른 개체 (예 : IList <object> 또는 간단한 개체가 연결된 개체)를 편집하는 방법은 무엇입니까?

그래서 내가 할 일은 편집 할보기로 제품을 전달하는 것입니다. 그러나 저장을 할 때 나는 제품 객체를보고 제조자는 이제 null입니다. 내가 제품에 대한 id와는 달리 Manufacturer 객체에 대해 hiddenfor를 시도했지만 작동하지 않습니다. 이 작업을 수행하는 가장 좋은 방법은 무엇입니까?

내가 무슨 뜻인지 알기를 바랍니다.

public ActionResult EditProduct(int id) 
    { 
     var product = _productService.GetById(id); 
     return View(product); 
    } 

[AcceptVerbs(HttpVerbs.Post)] 
    public ActionResult EditProduct(Product product) 
    { 
     //_productService.SaveOrUpdate(product); 
     TempData[Message] = product.ProductName + " have been saved"; 

     return RedirectToAction("Products"); 
    } 

편집

Product Object 

public virtual int Id { get; set; } 
public virtual string ProductName { get; set; } 
public virtual Manufacturer Manufacturer { get; set; } 
+0

제출시 제품 및 제조업체를 모두 통과합니까? 당신의 객체는 어떻게 구성되어 있습니까? Manufacturer 아래의 제품입니까? 또는 그들은 다른 실체에 있는가? –

+0

지금은 제품을 전달하지 않고 있습니다. 이 제품과 제조업체를 위해 사용자 지정 ViewModel을 만들어야합니까? MANF 뷰 모델을 바인딩하는 것과 마찬가지로 제품을 저장하기 전에 MANF를 전달한 다음 제품을 리 바인드해야합니다. 희망하는 Im Im 말하는 무엇과 함께 –

답변

0

당신이 무슨 말을 나는 문제가 당신이 당신의 제품을 저장하려고하는 상황에 맞는 생각에서. 당신이

public ActionResult EditProduct(Product product) 

로 선언하는 경우는 데이터베이스 컨텍스트가 부족하기 때문에 그것은

var product = _productService.GetById(id); 

같은 "의미"를 가지고 있지 않습니다. 그래서 난 당신이 다음을 수행하는 것이 좋습니다 :이 경우

[AcceptVerbs(HttpVerbs.Post)] 
public ActionResult EditProduct(int id) 
{  
    var product = _productService.GetById(id); 
    UpdateModel(product); 
    _productService.SaveOrUpdate(product); 
    TempData[Message] = product.ProductName + " have been saved"; 

    return RedirectToAction("Products"); 
} 
+0

그 일은 나를 위해 일하지 않는다. UpdateModel에 대한 예외가 발생합니다. innerexception이 null입니다. 하지만 기본적으로 UpdateModel은 데이터베이스와 다른 입력 매개 변수를 변경합니다. 어떻게 매개 변수를 변경합니까? –

+0

Doh는 나중에이 agin을 사용해보십시오. 내가 fakeproduct 저장소를 사용하고 있다는 것을 잊어 버렸습니다. 그래서 데이터베이스에서 객체를 가져 오지 못했습니다. 정말 중요합니까? hmm –

+0

내 생각에는 문제가되지 않지만 제조업체가 이미 (외래 키 때문에) 제품이 존재하면 데이터베이스에서 데이터베이스를 가져 와서 제품에 저장해야합니다. 제품을 업데이트하는 경우 제조업체를보기에서 "통과"하는 것은 의미가 없습니다. 어쩌면 제조사 ID를 숨겨진 필드로 전달할 수 있습니다. – Francisco

0

Manufacturer.Id에 대한 숨겨진 필드를 넣어보기에 이것을 시도를 제조업체의 기본 키 이것은 당신을 줄 것이다

<%=Html.HiddenFor(m=>m.Manufacturer.Id, new { @value=Model.Manufacturer.Id }) %> 

제품의 Manufacturer Object 값. 이제 제조업체의 기본 키를 가지고 있기 때문에 저장하기 전에 제조업체를 리 바인드해야합니다.

+0

제조업체 개체에 대한 값을 얻지 못한다는 사실은 양식을 제출할 때 양식이 문자열 기반의 키 - 값 개체이고 제조업체가 개체 내부의 엔터티라는 점입니다. 따라서 엔티티는 문자열로 변환 될 수 없습니다. 그래서 엔티티에 뭔가를 할당해야합니다 –

+0

어떤 이유로 UpdateModel이 작동합니다. 나는 이것을 마음 속에 간직 할 것이다. 팁 롭 주셔서 감사합니다. –

관련 문제