2013-01-25 2 views
0

로 전송되지 않는 :ASP.NET MVC - 열거 내가이처럼 보이는 DropDropListFor이 컨트롤러

using (Ajax.BeginForm("FilterListingsWorkflow", "Listing", 
    new { 
     categoryguid = Model.SelectedCategoryGuid, 
     workflowstatus = Model.SelectedWorkflowStatus, 
     entityName = Model.EntityName, 
    }, 
    new AjaxOptions { 
     HttpMethod = "POST", 
     UpdateTargetId = "listingTable", 
     InsertionMode = InsertionMode.Replace 
    })) 
    { 
     <p>Filter listings by Workflow Status:</p> 
     @Html.DropDownListFor(m => 
      Model.SelectedWorkflowStatus, 
      Enum.GetValues(typeof (WorkflowStatus)) 
       .Cast<WorkflowStatus>() 
       .Select(v => 
        new SelectListItem { 
         Text = v.ToString(), 
         Value = ((int) v).ToString() 
       }), 
      new { onchange = "$(this.form).submit()" }) 
    } 

당신이 볼 수 있듯이, 컨트롤러에 전송되는 세 가지 목적이 있습니다 :

  • Model.SelectedCategoryGuid, Model.SelectedWorkFlowStatusEntityName.

WorkFlowStatus은 열거 형이며 DropDownList에서 열거 형 중 하나를 클릭 할 때마다 항상 첫 번째 열이옵니다.

내가있는 DropDownList로에 삽입 얻을 세 가지 열거 값이 있습니다

  • 초안, 게시 및 보관합니다. workflowstatus 항상 (첫 번째 인) 초안 : 나는 컨트롤러에서 변수 위에 마우스를 올려 때

그래서, 나는 그들 중 하나를 클릭 할 때마다, 나는 매개 변수는 것을 알 수있다.

올바른 숫자가 전달되지 않는 이유를 알고 있습니까?

그것은 정말 나를 괴롭히는 것 ...

답변

2

당신의 DropDownList로의 이름은 SelectedWorkflowStatus입니다. 따라서 컨트롤러 작업에 인수와 같은 매개 변수가 사용되는지 확인하십시오.

[HttpPost] 
public ActionResult FilterListingsWorkflow(WorkflowStatus selectedWorkflowStatus) 
{ 
    ... 
} 

올바른 값을 얻을 수있는 곳입니다.

new { 
    categoryguid = Model.SelectedCategoryGuid, 
    workflowstatus = Model.SelectedWorkflowStatus, 
    entityName = Model.EntityName, 
} 

을하지만 당신의 행동에 workflowStatus 매개 변수를 보이지 않는 : 당신이 양식에 대한 몇 가지 경로 값을 설정하는 것을 볼 수 있습니다. 이 사람은 이전 값을 포함 할 것입니다. 이전 값은 뷰가 처음 렌더링 될 때 폼에 하드 코드 된 값입니다. 새 값 값은 DropDown에서 오는 selectedWorkflowStatus 매개 변수에 저장됩니다.

public class MyViewModel 
{ 
    public Guid SelectedCategoryGuid { get; set; } 
    public WorkflowStatus WorkflowStatus { get; set; } 
    public string EntityName { get; set; } 
    public WorkflowStatus SelectedWorkflowStatus { get; set; } 
} 

는 컨트롤러 액션이 걸릴 것이다 :

[HttpPost] 
public ActionResult FilterListingsWorkflow(MyViewModel model) 
{ 
    // model.SelectedWorkflowStatus will contain the value from the DropDown 
    // model.WorkflowStatus will contain the initial value 
    ... 
} 

이 모든 존재는이 상황을 처리하는 적절한 방법은 뷰 모델을 사용하기 위해 (항상 ASP.NET MVC에서와 같이) 말했다

또한 교체하십시오

m => Model.SelectedWorkflowStatus 

로 :

m => m.SelectedWorkflowStatus 

(내림차순) 클로저에서 모델을 캡처 할 필요는 없습니다.

+0

완벽하게 작동했습니다. 고맙습니다. – Subby