2011-02-23 3 views
0

MVC의보기에 여러 모델을 보내는 데 어려움을 겪고 있습니다. 내 문제는 다음과 같습니다.MVC에서 드롭 다운의 데이터로 엔티티를 편집하려고 시도했습니다.

EF4를 사용하여 범주별로 구성된 특성이있는 테이블이 있습니다.

가 :-(이미지를 게시 할 수 없습니다 내가 원하는 무엇

은 할 수 [표라는 카테고리 (CategoryTitle).에 연결된 테이블이라는 특성 (AttributeTitle, AttributeName을, 카테고리 ID) 적이]입니다 속성 개체를 편집하고 선택할 수있는 범주 드롭 다운을합니다.

나는 사용자 정의 뷰 모델

public class AttributeViewModel 
{ 
    public AttributeViewModel() 
    { 
    } 

    public Attribute Attribute { get; set; } 
    public IQueryable<Category> AllCategories { get; set; } 
} 

을 만들려고하지만, 그냥 엉망 었죠.

,536을
<div class="editor-field"> 
     <%: Html.DropDownList("Category", new SelectList((IEnumerable)Model.AllCategories, "CategoryID", "CategoryName")) %> 
    </div> 

내가 컨트롤러에 다시 그것을 얻고 있었다...

 [HttpPost] 
    public ActionResult Edit(int AttributeID, FormCollection formcollection) 
    { 
     var _attribute = ProfileDB.GetAttribute(AttributeID); 
     int _selcategory = Convert.ToInt32(formcollection["Category"]); 
     _attribute.CategoryID = (int)_selcategory; 

     try 
     { 
      UpdateModel(_attribute); (<---Error here) 
      ProfileDB.SaveChanges(); 

      return RedirectToAction("Index"); 
     } 
     catch (Exception e) 
     { 

      return View(_attribute); 
     } 
    } 

나는 코드를 디버깅 한 내 _attribute 정확한 모양과 _attribute.CategoryID는 = (INT)는 _selcategory 모델을 업데이트하지만 다음 오류가 발생합니다.

여기 어딘가에서이 작업을보다 명확하게 수행해야하며, 사용자 정의보기 모델을 만드는 대신보기에 두 개의 모델 만 보낼 수 있다고 생각합니다.

총계 : 내 속성을 편집하고 사용 가능한 모든 카테고리를 드롭 다운하고 싶습니다.

많은 도움을 주셨습니다.

+0

오류 메시지가 도움이됩니다. – jfar

+0

죄송합니다, 지금까지 귀하의 의견을 보지 못했습니다. 그것은 "유형의 모드를 업데이트 할 수 없습니다 ... 속성"과 같은 것을 말했습니다. 내가 updatemodel하려고 노력하고 있었다는 사실 때문이었습니다. – bek

답변

0

해결했습니다!

관심있는 사람이 있다면 내 해결책은 다음과 같습니다. 나는 클래스를 생성 :

public class AttributeEditViewModel 
{ 
    public AttributeEditViewModel() 
    { 
    } 

    public AttributeEditViewModel(Attribute attribute, SelectList categories) 
    { 
     this.attribute = attribute; 
     this.categories = categories; 
    } 

    public Attribute attribute { get; set; } 
    public SelectList categories { get; set; } 
} 

내 컨트롤러 :

내보기의
 // GET: /Attribute/Edit/5 
    public ActionResult Edit(int AttributeID) 
    { 
     Attribute _attribute = ProfileDB.GetAttribute(AttributeID); 

     var _viewmodel = new AttributeEditViewModel 
     { 
      attribute = _attribute, 
      categories = new SelectList(ProfileDB.GetAllCategories(), "CategoryID", "CategoryName", _attribute.CategoryID) 
     }; 

     return View(_viewmodel); 
    } 

부 :

<%@ Page Title="" Language="C#" MasterPageFile="~/Views/Shared/Site.Master" Inherits="System.Web.Mvc.ViewPage<KnowledgePortal.ViewModel.AttributeEditViewModel>" %> 



<div class="editor-field"> 
    <%: Html.DropDownList("Category", Model.categories, Model.attribute.CategoryID) %> 
</div> 

<p> 
    <input type="submit" value="Save" /> 
</p> 

그리고 다시 게시 :

// POST: /Attribute/Edit/5 
[HttpPost] 
public ActionResult Edit(int AttributeID, FormCollection formcollection) 
{ 
    var _attribute = ProfileDB.GetAttribute(AttributeID); 
    int _selcategory = Convert.ToInt32(formcollection["Category"]); 
    _attribute.CategoryID = (int)_selcategory; 

    try 
    { 
     ProfileDB.SaveChanges(); 

     return RedirectToAction("Index"); 
    } 
    catch (Exception e) 
    { 

     return View(_attribute); 
    } 
} 

기본적으로 내 문제가 있었다 나 때문에 updatemodel이 한 일에 대한 이해 부족. 그래서 "_attribute.CategoryID = _selcategory"이후에해야 할 일은 savechanges였습니다.하지만 먼저 실패한 updatemodel을 시도했습니다.

희망이 있으면 다른 사람에게 도움이됩니다.

관련 문제