2012-05-22 2 views
1

간단한 프로젝트 추적 웹 사이트를 개발 중입니다. "Project"에는 "Tasks"가 있고 "Task"에는 "Subtasks"가 있습니다. 기본 스캐 폴딩에서 "작업"을 만들 때 "작업"의 "프로젝트 ID"필드를 수동으로 선택해야합니다. "프로젝트 세부 정보"보기에서 "작업"만 만들 수 있도록 설정하고 싶습니다. 새 작업을 만들 때 "ProjectId"를 수동으로 선택할 필요가 없도록 어떻게 만들 수 있는지 궁금합니다. 다음은 조각 :만들기 작업에 외래 키 값 보내기

자동으로 비주얼 스튜디오에 의해 생성 된이 작업에 대한 Create.cshtml의 일부입니다

<div class="editor-label"> 
     @Html.LabelFor(model => model.ProjectId, "Project Id") 
    </div> 
    <div class="editor-field"> 
     @Html.DropDownList("ProjectId", String.Empty) 
     @Html.ValidationMessageFor(model => model.ProjectId) 
    </div> 

이 내가 수동으로 프로젝트 ID를 선택해야 드롭 다운 상자 결과 .

public ActionResult Create() 
    { 
     ViewBag.ProjectId = RouteData.Values["Id"]; 
     ViewBag.StatusId = new SelectList(db.Status, "Id", "Name"); 
     ViewBag.TaskTypeId = new SelectList(db.TaskTypes, "Id", "Name"); 
     return View(); 
    } 

어딘가에 내가 myTask을 설정해야 할 것입니다 : 내가 좋아하는 것이 무엇

public ActionResult Create() 
    { 
     ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Id"); 
     ViewBag.StatusId = new SelectList(db.Status, "Id", "Name"); 
     ViewBag.TaskTypeId = new SelectList(db.TaskTypes, "Id", "Name"); 
     return View(); 
    } 

이 같은 것입니다 :

이는 "작업"컨트롤러에서 기본 "만들기"작업입니다. ProjectId = ViewBag.ProjectId입니다. 그러나 나는 어디 있는지 모른다. 이것을 수행하는 것이 올바른 방법일까요? 아니면 더 좋은 방법이 있습니까? ProjectId의 기본 설정 값

덕분에

+0

'Create' 페이지를로드 할 때 실제로'ProjectId' 드롭 다운의 기본 선택 값을 설정 하시겠습니까? 이 올바른지? – mattytommo

+0

. 그것을 할 수있는 더 좋은 방법이 없다면. – Gerson

답변

1

있습니까?

값을 설정하고 시각적 표현이 보이지 않아야하는 것 같습니다.이 경우 모델에 ID를 전달한 다음 숨겨진 입력에 바인딩하면됩니다.

+0

예. 그게 내가 찾는거야. 백엔드에서 설정해야하며 사용자는 프로젝트 ID를 선택할 수있는 옵션이 없어야합니다. – Gerson

+0

그러면 'RouteData'에 전달하는 방법이 괜찮은 것 같습니다. DropDownList 대신보기에서 숨겨진 입력을 사용하십시오. –

+0

이것은 내가 그걸 가지고있는 정도입니다. 작업 만들기보기에서 : @ Html.HiddenFor (model => model.ProjectId, "Project Id") – Gerson

1

object selectedValue 소요 SelectList에 대한 과부하가, 당신이 생각하는 것처럼 어렵지 않다.

이 교체 :이

ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name"); 

을 (내가 선택한 ID로이 경우 2를 사용했습니다) :

ViewBag.ProjectId = new SelectList(db.Projects, "Id", "Name", 2); 
0

두 가지 가능성이 내 마음에 온다.

컨트롤러 :

public ActionResult Create() 
{ 
    var task = new Task() { ProjectId = your_predefined_value }; 
    ViewBag.Projects = new SelectList(db.Projects, "Id", "Id"); 
    ViewData.Model = task; 
    return View(); 
} 

보기 :

@Html.DropDownListFor(x => x.ProjectId, (SelectList)ViewBag.Projects) 

DropDownListFor이 ViewBag.Projects 이드 일치에서 항목을 먼저 선택합니다 x.ProjectId

또 다른 방법은 Selected을 설정하는 것입니다 특정 Item에 대해 True로 설정된 SelectListItem의 속성입니다.

컨트롤러 :

public ActionResult Create() 
{ 
    ViewBag.Projects = new List<SelectListItem>() { 
     new SelectListItem() 
     { 
      Value = "1", 
      Text = "Project 1", 
      Selected = true 
     } 
    }; 
    //... 
} 

보기 : 당신은 당신이 고정 된 값으로 DropDownList뿐 아니라 숨겨진 입력을 필요로하는지 확인

@Html.DropDownList("ProjectId", (IEnumerable<SelectListItem>)ViewBag.Projects)